java - AsyncTask error Android App crashes -
मेरा उकरा कोड:
सुरक्षित बनाम क्रिएट (बंडल सहेजे गए इन्स्टैंसस्टेट) {super.onCreate ( savedInstanceState); setContentView (R.layout.board); ArrayList & LT; स्ट्रिंग & gt; पासिंग = नया अर्रेलिस्ट & lt; स्ट्रिंग & gt; (); नया AsyncTaskParseJson ()। निष्पादित करें (); }
यह मेरा कोड है:
सार्वजनिक वर्ग AsyncTaskParseJson AsyncTask को बढ़ाता है & lt; स्ट्रिंग, स्ट्रिंग, स्ट्रिंग & gt; {अंतिम स्ट्रिंग TAG = "असिनकाटाकार्सेजसन.जावा"; स्ट्रिंग yourJsonStringUrl = "मेरे यूआरएल यहाँ"; JSONArray डेटा JsonArr = null; @ ओवरराइड संरक्षित शून्य पर प्र्रेक्सिक्यूट () {} @SuppressWarnings ("null") @ ओवरराइड सार्वजनिक स्ट्रिंग करनाइनाबैकग्राउंड (स्ट्रिंग ... arg0) {अंतिम स्ट्रिंग [] values = null; कोशिश {// हमारे जेसन पार्सर JsonParser jParser = नया JsonParser इन्स्तांत (); // यूआरएल से JSON स्ट्रिंग मिल JSONObject json = jParser.getJSONFromUrl (yourJsonStringUrl); // उपयोगकर्ताओं के डेटा की संख्या प्राप्त करें; जेसनएआरआर = जेसन। जेजेएसनअरे ("प्रतिक्रिया"); // सभी उपयोगकर्ताओं के माध्यम से लूप (इंट I = 1; i & lt; dataJsonArr.length (); i ++) {JSONObject c = dataJsonArr.getJSONObject (i); स्ट्रिंग टेक्स्ट = c.getString ("text"); मूल्यों [i] = पाठ; } // अर्रेएडप्टर & lt; स्ट्रिंग & gt; एडेप्टर = नया अर्रे एडाप्टर & lt; स्ट्रिंग & gt; (बोर्ड। इस, आर। लेट। एटम, आर.आईड.लैबेल, मान); // list1.setAdapter (adapter); } पकड़ (जेसनएक्स एक्सप्शन ई) {e.printStackTrace (); } वापसी नल; } @Override protected void onPostExecute (स्ट्रिंग strFromDoInBg) {}}
तो, जब मैं अनुभाग मानों [i] इस तरह से टिप्पणी करता हूं तो यह गतिविधि शुरू हो जाती है:
// मान [i] = पाठ;
लेकिन जब यह टिप्पणी नहीं की जाती है, तो ऐप केवल क्रैश हो जाता है मैं स्ट्रिंग [] सरणी वापस करने के लिए InBackground करना चाहता हूं, मैं यह कैसे करूँ?
आपको < / P>
मान = नया स्ट्रिंग [dataJsonArr.length ()];
यह भी ध्यान दें कि टिप्पणी की गई पंक्तियां doInbackground
में हैं। लेकिन आप एक पृष्ठभूमि धागा से यूआई अपडेट नहीं कर सकते। इसलिए नीचे onPostExecute
पर जाना चाहिए।
// ArrayAdapter & lt; स्ट्रिंग & gt; एडेप्टर = नया अर्रे एडाप्टर & lt; स्ट्रिंग & gt; (बोर्ड। इस, आर। लेट। एटम, आर.आईड.लैबेल, मान); // list1.setAdapter (adapter); एक स्ट्रिंग
सरणी का उपयोग करने के बजाय इसे ArrayList & lt; स्ट्रिंग & gt;
का उपयोग करना बेहतर है एग्गस प्रकार को भी बदलने के लिए
पब्लिक क्लास AsyncTaskParseJson AsyncTask & lt; स्ट्रिंग, स्ट्रिंग, अर्रेलिस्ट & lt; स्ट्रिंग & gt; & gt; { तब
@ ओवरराइड पब्लिक अर्रे लिस्ट & lt; स्ट्रिंग & gt; DoInBackground (स्ट्रिंग ... arg0) {ArrayList & lt; स्ट्रिंग & gt; मान = नया अर्रेलिस्ट & lt; स्ट्रिंग & gt; (); कोशिश {// हमारे जेसन पार्सर JsonParser jParser = नया JsonParser इन्स्तांत (); // यूआरएल से JSON स्ट्रिंग मिल JSONObject json = jParser.getJSONFromUrl (yourJsonStringUrl); // उपयोगकर्ताओं के डेटा की संख्या प्राप्त करें; जेसनएआरआर = जेसन। जेजेएसनअरे ("प्रतिक्रिया"); // सभी उपयोगकर्ताओं के माध्यम से लूप (इंट I = 1; i & lt; dataJsonArr.length (); i ++) {JSONObject c = dataJsonArr.getJSONObject (i); स्ट्रिंग टेक्स्ट = c.getString ("text"); values.add (पाठ); }} पकड़ (जेसनएक्स एक्सप्शन ई) {e.printStackTrace (); } वापसी मूल्य; }
तब
@Override सुरक्षित शून्य पर पोस्टएक्सएक्यूट (अर्रेलिस्ट & lt; स्ट्रिंग & gt; परिणाम) {super.onPostExecute (परिणाम); ArrayAdapter & LT; स्ट्रिंग & gt; एडाप्टर = नए अर्रेएडप्टर & lt; स्ट्रिंग & gt; (बोर्ड.इस, आर। लेट। एटम, आर.ड.लैबल, परिणाम); list1.setAdapter (अनुकूलक); }
यह भी सुनिश्चित करें कि list1
को इससे पहले आरंभ किया जा रहा है setAdapter
को कोज़ में मुझे कोड दिखाई नहीं देता जहां list1 < / कोड> आरंभ किया गया है।
Comments
Post a Comment