दिलचस्प पोस्ट
वेबकैट / ब्लिंक में मैक ओएस ट्रैपैड उपयोगकर्ताओं के लिए छिपे हुए स्क्रॉल सलाखों को रोकना पिकासो में अमान्य कैश पारदर्शी तुलनित्र क्या हैं? * आर्ग्स और ** क्वार्ग क्या मतलब है? ईएफ 4.0 में स्ट्रिंग को ईंट में कनवर्ट करें कैसे एक ही फैशन में दो ArrayLists यादृच्छिक? JSON.पार्स बनाम eval () ऑब्जेक्ट प्रारंभकर्ता और कन्स्ट्रक्टर के बीच अंतर क्या है? विंडोज फॉर्म में एक लेबल के लिए वर्ड रैप स्थिर स्मृति आवंटन और गतिशील स्मृति आवंटन के बीच का अंतर जावास्क्रिप्ट में "अपरिभाषित x 1" क्या है? एक डेटाबेस के साथ रीसाइक्लिव्यू का उपयोग करना एचडीएफएस के बजाय स्थानीय फाइल को कैसे लोड करें एएसपी.नेट एमवीसी में अलग-अलग विधानसभाओं में दृश्य अजगर में एक फ़ाइल का माइम प्रकार कैसे पाता है?

AsyncTask और Looper.prepare () त्रुटि

मेरे पास निम्न कोड है

class OverlayTask extends AsyncTask<Void, Void, Void> { @Override public void onPreExecute() { if (sites != null) { myMapView.getOverlays().remove(sites); myMapView.invalidate(); sites = null; } } @Override public Void doInBackground(Void... unused) { grabShipsWithLocation(); return (null); } @Override public void onPostExecute(Void unused) { myMapView.getOverlays().add(sites); myMapView.invalidate(); isLoading = false; } } 

यह कुछ परीक्षण उपकरणों पर ठीक काम करता है, लेकिन मैं देव कंसोल पर बहुत सी त्रुटियां देख रहा हूं। मुझे यह काम करने में प्रतीत नहीं हो सकता है कि यह Looper.prepare () और कहां रखे क्या इसकी ज़रूरत है?

 java.lang.ExceptionInInitializerError at com.test.appname.FinderMain$1.gotLocation(FinderMain.java:286) at com.test.appname.MyLocation$GetLastLocation.run(MyLocation.java:89) at java.util.Timer$TimerImpl.run(Timer.java:289) Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.<init>(Handler.java:121) at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421) at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421) at android.os.AsyncTask.<clinit>(AsyncTask.java:152) 

के रूप में अनुरोध MyLocation.java

  class GetLastLocation extends TimerTask { @Override public void run() { lm.removeUpdates(locationListenerGps); lm.removeUpdates(locationListenerNetwork); Location net_loc=null, gps_loc=null; if(gps_enabled) gps_loc=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if(network_enabled) net_loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); //if there are both values use the latest one if(gps_loc!=null && net_loc!=null){ if(gps_loc.getTime()>net_loc.getTime()) locationResult.gotLocation(gps_loc); else locationResult.gotLocation(net_loc); return; } if(gps_loc!=null){ locationResult.gotLocation(gps_loc); //Line 89 return; } if(net_loc!=null){ locationResult.gotLocation(net_loc); return; } locationResult.gotLocation(null); } } 

वेब के समाधान से एकत्रित समाधान "AsyncTask और Looper.prepare () त्रुटि"

लम्बी कहानी:

AsyncTask आंतरिक रूप से एक Handler का उपयोग करता है एक हेन्डलर मूल रूप से आप Runnables को थ्रेड पर हैंडलर को सौंपे गए दूसरे धागे से पोस्ट करने की अनुमति देता है, जो कि AsyncTask के मामले में हमेशा वह धागा होता है जहां से इसे कहा जाता है। यह केवल उन थ्रेड्स के लिए काम करता है जिनके पास Looper तैयार है, हालांकि।

अधिक जानकारी के लिए http://developer.android.com/reference/android/os/Handler.html देखें

लघु कथा:

बस प्रत्येक कॉल FinderMain$1.gotLocation या किसी AsyncTask में AsyncTask भीतर AsyncTask के निर्माण को AsyncTask और UI थ्रेड के लिए बाध्य एक Handler पोस्ट करें, जैसे:

 class GetLastLocation extends TimerTask { private Handler mHandler = new Handler(Looper.getMainLooper()); @Override public void run() { // ... mHandler.post(new Runnable() { public void run() { locationResult.gotLocation(null); } }); // ... } } 

मैंने यह कोशिश की … यह काम किया, आशा है कि यह तुम्हारी मदद करेगा ..

 protected class Asyctast extends AsyncTask<String, Integer, Integer> { @Override protected Integer doInBackground(String... params) { // TODO Auto-generated method stub Log.d("Asynctask", ""+params); Looper.prepare(); ImageThumbnailsActivity m = new ImageThumbnailsActivity(); Toast.makeText(ImageThumbnailsActivity.this,""+params ,Toast.LENGTH_SHORT).show(); final Dialog dialog_options = new Dialog(ImageThumbnailsActivity.this); dialog_options.setContentView(R.layout.option); dialog_options.show(); Looper.loop(); return null; } }