दिलचस्प पोस्ट
ओरेकल एसक्यूएल में एक सिंगल उद्धरण को कैसे संभालना है ट्विटर एपीआई त्रुटि 215 देता है, खराब प्रमाणीकरण डेटा किसी सूची में संख्याओं की संचयी संख्या कैसे प्राप्त करें? ऑटो लेआउट UIScrollView गतिशील ऊंचाइयों के साथ subviews के साथ क्या जावास्क्रिप्ट संपत्ति नामों में डैश की अनुमति है? पारदर्शी नियंत्रण बनाना बिलाव सर्वर / क्लाइंट स्व-हस्ताक्षरित SSL प्रमाणपत्र तत्व का console.log। बच्चे लंबाई 0 से पता चलता है लेकिन बाद में विस्तारित होने पर तीन प्रविष्टियां होती हैं ट्विटर बूटस्ट्रैप 3, खड़ी केंद्र सामग्री सी # वस्तु के लिए JSON स्ट्रिंग कन्वर्ट कमान डिजाइन पैटर्न का उपयोग करना तारांकन चिह्न के रूप में पासवर्ड कैसे गूँज गया है के साथ फाइल लिखना विफल रहता है मोबाइल ब्राउज़र का पता लगाएं CodeIgniter अस्वीकृत कुंजी वर्ण

एंड्रॉइड: प्रगति डीआलोग। शो () getApplicationContext के साथ क्रैश

मैं समझ सकता हूं कि यह क्यों हो रहा है। यह कोड:

mProgressDialog = ProgressDialog.show(this, "", getString(R.string.loading), true); 

सिर्फ ठीक काम करता है हालांकि, यह कोड:

 mProgressDialog = ProgressDialog.show(getApplicationContext(), "", getString(R.string.loading), true); 

निम्नलिखित अपवाद फेंकता है:

 W/WindowManager( 569): Attempted to add window with non-application token WindowToken{438bee58 token=null}. Aborting. D/AndroidRuntime( 2049): Shutting down VM W/dalvikvm( 2049): threadid=3: thread exiting with uncaught exception (group=0x4001aa28) E/AndroidRuntime( 2049): Uncaught handler: thread main exiting due to uncaught exception E/AndroidRuntime( 2049): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tastekid.TasteKid/com.tastekid.TasteKid.YouTube}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application E/AndroidRuntime( 2049): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401) E/AndroidRuntime( 2049): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) E/AndroidRuntime( 2049): at android.app.ActivityThread.access$2100(ActivityThread.java:116) E/AndroidRuntime( 2049): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) E/AndroidRuntime( 2049): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime( 2049): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime( 2049): at android.app.ActivityThread.main(ActivityThread.java:4203) E/AndroidRuntime( 2049): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime( 2049): at java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime( 2049): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) E/AndroidRuntime( 2049): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) E/AndroidRuntime( 2049): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime( 2049): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application E/AndroidRuntime( 2049): at android.view.ViewRoot.setView(ViewRoot.java:460) E/AndroidRuntime( 2049): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) E/AndroidRuntime( 2049): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) E/AndroidRuntime( 2049): at android.app.Dialog.show(Dialog.java:238) E/AndroidRuntime( 2049): at android.app.ProgressDialog.show(ProgressDialog.java:107) E/AndroidRuntime( 2049): at android.app.ProgressDialog.show(ProgressDialog.java:90) E/AndroidRuntime( 2049): at com.tastekid.TasteKid.YouTube.onCreate(YouTube.java:45) E/AndroidRuntime( 2049): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) E/AndroidRuntime( 2049): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) E/AndroidRuntime( 2049): ... 11 more 

कोई अंदाजा ऐसा क्यों हो रहा है? मैं इसे onCreate विधि से कॉल कर रहा हूं।

वेब के समाधान से एकत्रित समाधान "एंड्रॉइड: प्रगति डीआलोग। शो () getApplicationContext के साथ क्रैश"

आप किस एपीआई संस्करण का उपयोग कर रहे हैं? अगर मुझे सही है कि समस्या क्या है, तो यह एंड्रॉइड 1.6 (एपीआई वर्जन 4) में निर्धारित किया गया था।

यह ऑब्जेक्ट संदर्भ की तरह दिखता है कि getApplicationContext() केवल रिक्त अंक वापस कर रहा है। मुझे लगता है कि आपको एक ऐसी समस्या है जिस पर मेरे पास था उसमें कुछ कोड onCreate() में चलाया जा रहा है इससे पहले कि खिड़की वास्तव में बनाई जा रही है यह एक हैक होने वाला है, लेकिन कुछ सौ मिलीसेकेंड (आईआईआरसी: 300-400 में मेरे लिए काम करने लगते हैं, लेकिन आपको टिंकर करने की आवश्यकता होगी) में एक नया थ्रेड लॉन्च करने की कोशिश करेंगी जो आपके प्रगति डीलाॉग को खोलता है और आपको जो कुछ भी आवश्यक है जैसे नेटवर्क आईओ)। कुछ इस तरह:

 @Override public void onCreate(Bundle savedInstanceState) { // do all your other stuff here new Handler().postDelayed(new Runnable() { @Override public void run() { mProgressDialog = ProgressDialog.show( YouTube.this.getApplicationContext(), "", YouTube.this.getString(R.string.loading), true); // start time consuming background process here } }, 1000); // starting it in 1 second } 

मैं एपीआई 7 स्तर के साथ एंड्रॉइड संस्करण 2.1 का उपयोग कर रहा हूं। मुझे इस (या समान) समस्या का सामना करना पड़ा और इसका उपयोग करके हल किया गया:

 Dialog dialog = new Dialog(this); 

इसके अलावा:

 Dialog dialog = new Dialog(getApplicationContext()); 

उम्मीद है की यह मदद करेगा 🙂

मेरे लिए काम करना बदल रहा है

 builder = new AlertDialog.Builder(getApplicationContext()); 

सेवा मेरे

 builder = new AlertDialog.Builder(ThisActivityClassName.this); 

अजीब बात यह है कि पहली बार गूगल ट्यूटोरियल में पाया जा सकता है और लोगों को इस पर त्रुटि मिलती है ..

मुझे नहीं लगता कि यह एक रिक्त आवेदन संदर्भ के आसपास एक समय का मुद्दा है

अपने ऐप के भीतर आवेदन का विस्तार करने का प्रयास करें (या यदि आपके पास पहले से है तो इसका उपयोग करें)

 public class MyApp extends Application 

एक निजी सिंगलटन के रूप में उपलब्ध उदाहरण बनाएं। यह कभी भी अशक्त नहीं है

 private static MyApp appInstance; 

MyApp में एक स्थिर सहायक बनाएं (जो सिंगलटन का उपयोग करेगा)

  public static void showProgressDialog( CharSequence title, CharSequence message ) { prog = ProgressDialog.show(appInstance, title, message, true); // Never Do This! } 

बूम !!

इसके अलावा, एंड्रॉइड इंजीनियर का उत्तर यहां देखें: WindowManager $ BadTokenException

इस त्रुटि का एक कारण किसी ऐसे संदर्भ के माध्यम से एक अनुप्रयोग विंडो / संवाद प्रदर्शित करने का प्रयास कर रहा है जो एक गतिविधि नहीं है

अब, मैं सहमत हूं, यह कोई मतलब नहीं है कि गतिविधि गतिविधि के बजाय एक संदर्भ param लेता है ..

ऊपर दिए गए उत्तरों को पढ़ने के बाद मैंने पाया कि मेरी स्थिति के लिए निम्नलिखित समस्या तय की गई है।

इसने त्रुटि को फेंक दिया

 myButton.setOnClickListener(new OnClickListener(){ public void onClick(View v) { MyDialogue dialog = new MyDialogue(getApplicationContext()); dialog.show(); } }); 

पिछली उत्तरों के आधार पर यह सुझाव दिया गया कि संदर्भ गलत था, मैंने GetApplicationContext () को बदलकर संदर्भ को प्राप्त करने के लिए बटन पर क्लिक करें बटन क्लिक करें।

 myButton.setOnClickListener(new OnClickListener(){ public void onClick(View v) { MyDialogue dialog = new MyDialogue(v.getContext()); dialog.show(); } }); 

मैं जावा की कार्यप्रणाली पूरी तरह से समझ नहीं पा रहा हूं, इसलिए मैं गलत हो सकता हूं, लेकिन मुझे लगता है कि मेरे विशिष्ट परिस्थिति के कारण इस तथ्य से संबंधित हो सकता था कि उपर्युक्त स्निपेट को एब्स्ट्रक्ट एक्टिविटी कक्षा में परिभाषित किया गया था; विरासत में मिली और कई क्रियाकलापों द्वारा प्रयोग किया जाता है, शायद उस तथ्य में योगदान दिया गया है कि getApplicationContext () मान्य संदर्भ वापस नहीं करता है ?? (केवल अनुमान है)।

मैं मैटेक्टेड ओवरले के साथ मानचित्र दृश्य बना रहा हूं मैं अपने मानचित्रित गतिविधि से इस तरह मेरे आइटम का निर्माण कर रहा था।

 OCItemizedOverlay currentLocationOverlay = new OCItemizedOverlay(pin,getApplicationContext); 

मैंने पाया है कि मुझे "android.view.WindowManager $ BadTokenException मिलेगा: खिड़की जोड़ने में असमर्थ टोकन रिक्त एक आवेदन के लिए नहीं है" अपवाद जब मेरी मदस्टोइड ओवरले की ऑनटैप विधि ट्रिगर हो गई थी (जब मानचित्र मानचित्रदृश्य पर टैप किया गया है)।

मुझे पता चला कि यदि मैं बस पारित किया, तो 'यह' मेरे निर्माता के लिए 'getApplicationContext ()' के बजाय, यह समस्या दूर चली गई। यह अलैयाजाजैकट के निष्कर्ष का समर्थन करने लगता है अजीब।

TabActivities के भीतर दिखाए गए गतिविधियों के लिए getParent () का उपयोग करें

 final AlertDialog.Builder builder = new AlertDialog.Builder(getParent()); 

के बजाय

 final AlertDialog.Builder builder = new AlertDialog.Builder(this); 

एंड्रॉइड 2.2 के लिए
इस कोड का उपयोग करें:

 //activity is an instance of a class which extends android.app.Activity Dialog dialog = new Dialog(activity); 

इस कोड के बजाय:

 // this code produces an ERROR: //android.view.WindowManager$BadTokenException: //Unable to add window -- token null is not for an application Context mContext = activity.getApplicationContext(); Dialog dialog = new Dialog(mContext); 

टिप्पणी: मेरे कस्टम संवाद को activity.onCreateDialog(int dialogId) के बाहर बनाया गया है। activity.onCreateDialog(int dialogId) विधि

प्रयत्न –

 AlertDialog.Builder builder = new AlertDialog.Builder(getParent()); 

(संगतता) टुकड़ों के साथ एक समान समस्या थी जिसमें getActivity() भीतर getActivity() का उपयोग करके इसे क्रैश किया जाता है मैं मानता हूं कि यह समय की वजह से है

एक संभावित सुधार:

 mContext = getApplicationContext(); if (mContext != null) { mProgressDialog = ProgressDialog.show(mContext, "", getString(R.string.loading), true); } 

के बजाय का उपयोग करने का

 mProgressDialog = ProgressDialog.show(getApplicationContext(), "", getString(R.string.loading), true); 

संदर्भ को पकड़ने के लिए अधिक समय देने के लिए जितनी जल्दी हो सके mContext को रखें। अभी भी कोई गारंटी नहीं है कि यह काम करेगा, यह केवल एक दुर्घटना की संभावना कम कर देता है अगर यह अभी भी काम नहीं करता है, तो आपको टाइमर हैक का सहारा लेना होगा (जो बाद में संवाद को खारिज करने जैसी अन्य समय की समस्याएं पैदा कर सकता है)

बेशक, यदि आप this या ActivityName.this इस्तेमाल कर सकते हैं। this , यह अधिक स्थिर है क्योंकि this पहले से कुछ को इंगित करता है। लेकिन कुछ मामलों में, कुछ टुकड़े के आर्किटेक्चर की तरह, यह एक विकल्प नहीं है

(भविष्य के संदर्भ के लिए)

मुझे लगता है कि ऐसा इसलिए है क्योंकि अनुप्रयोग संदर्भ और गतिविधि संदर्भ में अंतर है, जैसा कि यहां बताया गया है: http://www.doubleencore.com/2013/06/context/

इसका अर्थ है कि हम अनुप्रयोग प्रसंग का उपयोग करके संवाद नहीं दिखा सकते। बस।

गतिविधियों के अंदर संवाद का उपयोग करने के लिए, इसे इस तरह से करें:

 private Context mContext; private AlertDialog.Builder mBuilder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = this; //using mContext here refering to activity context mBuilder = new AlertDialog.Builder(mContext); //... //rest of the code //... } 

टुकड़ों के अंदर संवाद का उपयोग करने के लिए, इसे इस तरह से करें:

 private Context mContext; private AlertDialog.Builder mBuilder; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View mRootView = inflater.inflate(R.layout.fragment_layout, container, false); mContext = getActivity(); //using mContext here refering to fragment's hosting activity context mBuilder = new AlertDialog.Builder(mContext); //... //rest of the code //... return mRootView; } 

वह यह है ^ _ ^

इसके चारों ओर पाने के लिए मैंने अपने सभी गतिविधियों के लिए आधार वर्ग बनाना था जहां मैं वैश्विक डेटा संग्रहीत करता हूं। पहली गतिविधि में, मैंने इस संदर्भ को मेरे आधार वर्ग में एक वैरिएबल में सहेजा था:

आधार कक्षा

 public static Context myucontext; 

बेस क्लास से प्राप्त पहली गतिविधि

 mycontext = this 

फिर जब मैं संवाद बना रहा हूं तो getApplicationContext के बजाय mycontext का उपयोग करता हूं।

 AlertDialog alertDialog = new AlertDialog.Builder(mycontext).create(); 

यदि आप ProgressDialog.show () को एक टुकड़े में बुला रहे हैं, तो मैकॉन्टेक्स्ट के लिए गतिविधि का कास्टिंग मेरे लिए काम किया है

  ProgressDialog pd = new ProgressDialog((Activity) mContext); 

मैंने अपवाद के लिए ऐलर्ट डायलॉग लागू किया है जो वर्तमान सक्रियमी दृश्य पर फेंक रहा है.जब भी मैंने ऐसा दिया था

 AlertDialog.Builder builder = new AlertDialog.Builder(context); 

एक ही विंडो अपवाद को देखते हुए। मैं कॉन्टेट () से अलर्ट के लिए कोड लिखता हूं। इतना आसान है कि मैंने context = this; प्रयोग किया context = this; setContentView() कथन पर onCreate onCreate() method.Taken प्रसंग चर वैश्विक Context context;

कोड नमूना है

 static Context context; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.network); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); context = this; ....... 

चेतावनी विधि नमूना है

 private void alertException(String execMsg){ Log.i(TAG,"in alertException()..."+context); Log.e(TAG,"Exception :"+execMsg); AlertDialog.Builder builder = new AlertDialog.Builder(context); ....... 

यह मेरे लिए ठीक काम करता है। वास्तव में मैं स्टैक ओवरफ्लो पर इस त्रुटि की खोज की थी। मुझे यह क्वेरी मिली। इस पोस्ट के सभी उत्तर पढ़ने के बाद, मैंने इस तरीके से कोशिश की तो यह काम करता है। मैंने सोचा था कि अपवाद से उबरने के लिए यह एक आसान समाधान है।

धन्यवाद, राजेंद्र

अगर आप समूह की गतिविधि पर कोई समस्या है, तो इसका इस्तेमाल न करें। अभिभावक गतिविधि समूह से माता-पिता एक स्थिर है

 final AlertDialog.Builder builder = new AlertDialog.Builder(GroupActivityParent.PARENT); 

के बजाय

 final AlertDialog.Builder builder = new AlertDialog.Builder(getParent()); 

एक संवाद हमेशा एक गतिविधि के एक भाग के रूप में बनाया और प्रदर्शित किया जाता है आपको एप्लिकेशन संदर्भ के बजाय एक गतिविधि संदर्भ में पास करना होगा।

http://developer.android.com/guide/topics/ui/dialogs.html#ShowingADialog