16

मैं अपने एंड्रॉइड 3.0 ऐप के साथ NetworkOnMainThreadException में चलाता हूं। समाधान के लिए खोज रहे हुए मुझे this मिला, लेकिन अगर मैं इसे सही ढंग से समझता हूं, तो डिफ़ॉल्ट सेटिंग यह होगी कि सख्त मोड बंद है।एंड्रॉइड हनीकॉम्ब: नेटवर्कऑनमेन थ्रेड अपवाद भी AsyncTask और कोई सख्त मोड का उपयोग करते समय?

इसके अलावा, मेरे सभी नेटवर्क का उपयोग AsyncTask में है, इसलिए मुझे इस अपवाद में बिंदु दिखाई नहीं देता है।

तो, मैं अब काफी बेताब हूँ कि मैं क्या इसे रोकने के लिए क्या करना चाहिए ...

सधन्यवाद, जेलीफ़िश

संपादित करें:

This blog entry का कहना है कि AsyncTask पर्याप्त होना चाहिए , लेकिन कम से कम StrictMode बिंदु स्पष्ट करता है।

समाधान:

मैं StrictMode बंद कर दिया है (इसकी शायद बेहतर कुछ सेटिंग्स रखने के लिए, लेकिन मैं ... परेशान नहीं किया जा सकता है):

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

उसके बाद, मैं चला "java.lang.RuntimeException में: यह थ्रेड HTTP अनुरोधों को रोकता है", लेकिन इस here के लिए एक समाधान मिला। मैं थोड़ा उलझन में हूँ, हालांकि, के रूप में AndroidHttpClient ठीक काम किया जब मैं अपने एंड्रॉयड 2.0 + अनुप्रयोग में इसका इस्तेमाल किया ...

समाधान, PART2

जैसा सामने आया, AsyncTask का उपयोग कर एक अच्छा विचार था लेकिन done wrong पर बहुत बेकार ... तो सख्त मोड की प्रतिक्रिया में कुछ भी गलत नहीं था। सुनना चाहिए था, एर? ;)

अभी भी यह जानना अच्छा है कि यह डिफ़ॉल्ट रूप से हनीकॉम पर सक्रिय है।

उत्तर

5

हनीकॉम में डिफ़ॉल्ट रूप से StrictMode चालू है।

link विशेष रूप से penaltyDeathOnNetwork() देखें। मैं एक समान समस्या में भाग गया।

+0

धन्यवाद ... इस नए एपीआई मुझे पागल गाड़ी चला रहा है। ^^ मुझे यह नहीं मिलता है कि क्यों AsyncTask मुख्य धागे से बाहर नहीं माना जाता है ... – jellyfish

+0

मैं सहमत हूं। Thread.run() के साथ क्या गलत है? उन्हें इसकी आवश्यकता क्यों है? – Chloe

14

एंड्रॉयड हनीकोम्ब StrictMode में सक्षम किया गया है, OnCreate() समारोह पर कोड जोड़ने इसे बंद ...

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main);  
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
    } 
+0

यह कोड नीति को बदलने का सही तरीका हो सकता है, लेकिन यह 'NetworkOnMainThreadException' को संभालने का लगभग हमेशा गलत तरीका है। यदि आप ओपी के अपडेट की जांच करते हैं, तो आप देखेंगे कि वे 'AsyncTask' का उपयोग करके अनुचित रूप से अनुचित थे। लेकिन, 'AsyncTask', या यूआई थ्रेड से नेटवर्क यातायात प्राप्त करने के कुछ अन्य तंत्र, मूल रूप से इस नीति परिवर्तन हैक की तुलना में हमेशा एक बेहतर समाधान है। – Nate

संबंधित मुद्दे