दिलचस्प पोस्ट
सत्र क्या हैं? वो कैसे काम करते है? एक फ़ाइल की शुरुआत करने के लिए लाइन तैयार करें मैं कैसे Excel VBA में एक स्ट्रिंग को यूआरएल सांकेतिक शब्दों में बदल सकता हूँ? `पाप` के अपरिभाषित संदर्भ नई लाइन बिना एक फ़ाइल पढ़ना एक foreach लूप में आप एक सरणी तत्व कैसे निकाल सकते हैं? मैं HTTP पर एक बाइनरी फ़ाइल कैसे डाउनलोड करूं? जावा में समानता स्ट्रिंग तुलना उपयोगकर्ता के लोकेल प्रारूप और समय ऑफसेट में प्रदर्शित दिनांक / समय मैं कार्यपुस्तिका में एक मेनू आइटम कैसे छुपाऊं? JFreeChart MouseListener चार्ट तत्वों को हल नहीं करता है उद्देश्य सी नाम स्थान की टक्कर को हल करने का सबसे अच्छा तरीका क्या है? क्यों नहीं ProjectName- Prefix.pch Xcode 6 में स्वचालित रूप से बनाया है? उंगली, एंड्रॉइड द्वारा कैनवस में ड्रा करें PHP में पाठ से यूआरएल निकालें

NetworkOnMainThreadException

मुझे आधिकारिक दस्तावेज़ों पर नेटवर्कऑन माइनथ्रेड एक्सपेशेशन के बारे में अभी पता चला है

और सोच रहा था कि क्या एमुलेटर इस फेंक रहे हैं। मैं अपने ऐप का काफी कुछ परीक्षण कर रहा हूं और जहाँ तक मुझे पता है कि सभी नेटवर्किंग मुख्य थ्रेड (रोबोग्यूइस रोबोएसिन्क टास्क के प्रयोग से) बंद है, लेकिन आपको पता नहीं है कि क्या कोई बच नहीं गया है।

मैं भी स्ट्रिक्टोड का उपयोग कर रहा हूं और मैंने कुछ भी नहीं देखा है।

  1. क्या मेरा कोड सिर्फ साफ है या क्या इसे एमुलेटर पर नहीं फेंक दिया गया है?

  2. उत्पादन में इस घटना के लिए हम कैसे तैयार रहेंगे?

  3. एक अनुग्रह अवधि या कुछ चीज़ों के बारे में क्या? या वह अब बीत गया है 😉 ??

वेब के समाधान से एकत्रित समाधान "NetworkOnMainThreadException"

मधुकोश के साथ आप अपने मुख्य धागे पर एक नेटवर्किंग ऑपरेशन नहीं कर सकते क्योंकि प्रलेखन कहते हैं। इस कारण से आपको हेन्डलर या एसिंक्टस्क का इस्तेमाल करना चाहिए। ऐसा करने का कोई अन्य तरीका नहीं है।

यहां आप नेटवर्किंग ऑपरेशन के बारे में तुर्की में 2 उदाहरण लिखे हैं शायद वे मदद करते हैं

  • 3. पार्टी कुतुउपन कुल्लानंद (ksoap2) , (यह अंग्रेजी अनुवाद भी शामिल है)

  • एसिंक टास्क क्लासटन डोनन परमेट्रेई हैंडल एटमेक , गूगल अनुवाद

मैंने यह परीक्षण किया है और यह वास्तव में एमुलेटर पर भी होता है अगर आप इसे 3.0 टैबलेट और उससे आगे प्राप्त करने की योजना बनाते हैं, तो कम से कम इम्यूलेटर पर अपने ऐप का परीक्षण करना बेहतर होगा।

यदि आप 3.0 पर चल रहे हैं, तो मैं मदद नहीं कर सकता; क्योंकि इसमें सख्त मोड डिफ़ॉल्ट रूप से चालू है; लेकिन इसके ऊपर की तरफ, तो यह मदद कर सकता है

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

अपने HTTP कनेक्शन बनाने से पहले इसे शामिल करें; तो यह काम करता है

NetworkOnMainThreadException तब होता है जब कुछ नेटवर्किंग संचालन मुख्य विधि के अंदर किया जाता है; मेरा मतलब है Oncreate() आप इस समस्या को हल करने के लिए AsyncTask उपयोग कर सकते हैं या आप उपयोग कर सकते हैं

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

अंदर onCreate() विधि

हनीकॉब एसडीके (3) से, Google मुख्य रूप से मुख्य थ्रेड क्लास में नेटवर्क अनुरोधों (एचटीटीपी, सॉकेट) और अन्य संबंधित कार्यों की अनुमति नहीं देगा, वास्तव में, यूआई थ्रेड में सीधे नेटवर्क ऑपरेशन नहीं करना चाहिए, यूआई को रोकना, उपयोगकर्ता अनुभव खराब! यहां तक ​​कि अगर Google को निषिद्ध नहीं है, सामान्य परिस्थितियों में, हम ऐसा नहीं करेंगे ~! तो, यह है कि, हनीकोम्ब एसडीके (3) संस्करण में, आप ऐसा कर सकते हैं ऐसा मुख्य थ्रेड में, 3 से अधिक, यह काम नहीं करेगा।

1. उपयोग Handler

नेटवर्क के साथ जुड़े समय-समय पर काम करने वाली अधिकताएं एक बच्चे के थैले में रखी जाती हैं और फिर Handler मैसेजिंग तंत्र के उपयोग से मुख्य थैले के साथ संप्रेषित की जाती हैं।

 public static final String TAG = "NetWorkException"; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.activity_net_work_exception); // Opens a child thread, performs network operations, waits for a return result, and uses handler to notify UI new Thread(networkTask).start(); } Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); // get data from msg and notify UI Bundle data = msg.getData(); String val = data.getString("data"); Log.i(TAG, "the result-->" + val); } }; /** * net work task */ Runnable networkTask = new Runnable() { @Override public void run() { // do here, the HTTP request. network requests related operations Message msg = new Message(); Bundle data = new Bundle(); data.putString("data", "request"); msg.setData(data); handler.sendMessage(msg); } }; 

2. उपयोग AsyncTask

 public static final String TAG = "NetWorkException"; private ImageView mImageView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.activity_net_work_exception); mImageView = findViewById(R.id.image_view); new DownImage(mImageView).execute(); } class DownImage extends AsyncTask<String, Integer, Bitmap> { private ImageView imageView; public DownImage(ImageView imageView) { this.imageView = imageView; } @Override protected Bitmap doInBackground(String... params) { String url = params[0]; Bitmap bitmap = null; try { //load image from internet , http request here InputStream is = new URL(url).openStream(); bitmap = BitmapFactory.decodeStream(is); } catch (Exception e) { e.printStackTrace(); } return bitmap; } @Override protected void onPostExecute(Bitmap result) { // nodify UI here imageView.setImageBitmap(result); } } 

3. StrictMode

 if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); }