آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل در اجرای دیالوگ خارج اکتیویتی 

سپهر  11 سال پیش  11 سال پیش
+1 0

من یک کلاسی دارم که با استفاده از Async Task اطلاعات رو میخونم

حالا زمانی که در این Async task از دیالوگ اسفاده میکنم باید یک context بدم به دیالوگ چون در کلاس اکتیویتی نیستم از G.context استفاده کردم 

اما زمانی که برنامه به خط dialog.show() میرسه کرش میکنه 

 private static class serverTask extends AsyncTask<List<String>, Void, String>
    {

        private final ProgressDialog dialogs = new ProgressDialog(G.context);

        private final AlertDialog    alerts  = new AlertDialog.Builder(G.context).create();


        @Override
        protected void onPreExecute() {

            dialogs.setMessage("Logging in...");
            dialogs.show();

        }


        @Override
        protected String doInBackground(List<String>... lists) {
          
        }


        @Override
        protected void onPostExecute(String result)
        {
        }

 

 10-15 16:27:27.953: E/AndroidRuntime(15289): FATAL EXCEPTION: main
10-15 16:27:27.953: E/AndroidRuntime(15289): Process: uncocoder.com.project, PID: 15289
10-15 16:27:27.953: E/AndroidRuntime(15289): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at android.view.ViewRootImpl.setView(ViewRootImpl.java:536)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at android.app.Dialog.show(Dialog.java:286)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at uncocoder.com.project.app.StructUser$serverTask.onPreExecute(StructUser.java:100)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at uncocoder.com.project.app.StructUser.login(StructUser.java:65)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at uncocoder.com.project.app.ActivityLogin$1.onClick(ActivityLogin.java:69)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at android.view.View.performClick(View.java:4438)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at android.view.View$PerformClick.run(View.java:18422)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at android.os.Handler.handleCallback(Handler.java:733)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at android.os.Handler.dispatchMessage(Handler.java:95)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at android.os.Looper.loop(Looper.java:136)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at android.app.ActivityThread.main(ActivityThread.java:5001)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at java.lang.reflect.Method.invokeNative(Native Method)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at java.lang.reflect.Method.invoke(Method.java:515)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
10-15 16:27:27.953: E/AndroidRuntime(15289): 	at dalvik.system.NativeStart.main(Native Method)
10-15 16:27:29.103: E/InputDispatcher(790): channel '44462260 uncocoder.com.project/uncocoder.com.project.app.ActivityMain (server)' ~ Channel is unrecoverably broken and will be disposed!
10-15 16:27:29.723: E/AsyncInputConnection(29076): onUpdateSelection: oss=0, ose=0, nss=0, nse=0, cs=0, ce=0

 

 

+2 0
context دیالوگ باید اکتیویتی صاحب دیالوگ باشه نه از جنس context اپلیکیشن (11 سال پیش)
0 0
ینی من باید چی بذارم جای اون G.context ? (11 سال پیش)
0 0
خیلی راحت :) Activity جاری رو به AsyncTask پاس بده و بده به ProgressDialog (11 سال پیش)
+2 0
از G.currentActivity هم که استاد تو آموزشا گفتن میتونی استفاده کنی (11 سال پیش)
+1 0
ممنون از روش Enhanced activity و currentActivity مشکلم حل شد (11 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
Spirit  11 سال پیش
+2 0

private class Loader extends AsyncTask<Void, Void, Void>
{

private Context context;
private ProgressDialog dialog;

public Loader(Context context)
{
this.context = context;
}

@Override
protected void onPreExecute()
{
super.onPreExecute();
dialog = new ProgressDialog(context);
.
.
dialog.show();
}

}

اینجوری :

 new Loader(MyActivity.this).execute();

 


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .