بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
مشکل در اجرای دیالوگ خارج اکتیویتی
من یک کلاسی دارم که با استفاده از 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();
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .