JSON
& listview
ll काम सेट ..
मदों की एक सूची 1.displaying
एंड्रॉइड एसडीके एंड्रॉइड.एप.लिस्टएक्टिविटी नामक सुपरक्लास का उपयोग करके डेटा की एक सूची को त्वरित रूप से प्रदर्शित करने का एक सुविधाजनक तरीका प्रदान करता है। यह गतिविधि पहले से ही एक सामग्री दृश्य प्रदान करती है, जो ListView
के साथ कॉन्फ़िगर किया गया है, जो डेटा के साथ उपयोग करने और पॉप्युलेट करने के लिए तैयार है।
सूची दृश्य अब डेटा को उस पंक्ति को मानचित्रित करने के साधनों के साथ प्रदर्शित करने के लिए डेटा दिया जाना चाहिए। ListAdaptors इस तंत्र को प्रदान करते हैं और setListAdaptor का उपयोग करके ListActivity के अंतर्निहित ListView पर सेट हैं।
एक Android एसडीके एडाप्टर (ArrayAdaptor)
जानता है कि कैसे ListViews
में मनमाने ढंग से डेटा की सरणियों को संभालने के लिए प्रदान की (एंड्रॉयड एसडीके भी इस तरह के कर्सर एडेप्टर के रूप में कई अन्य ListAdaptors
, है, जो जब एक ListView को स्थानीय डेटा भंडारण जोड़ने सहायता कर सकते हैं के साथ आता है)। आपको एडाप्टर को उस लेआउट के साथ भी प्रदान करने की आवश्यकता है जिसका उपयोग तत्वों को प्रत्येक पंक्ति पर प्रस्तुत करने के लिए किया जा सकता है। उदाहरण में हम एंड्रॉयड एसडीके प्रदान की लेआउट, simple_list_item_1 है, जो एक एकल पाठ हमारे एकल तार बिछाने के लिए लेबल-एकदम सही है का उपयोग कर रहे नीचे:
String[] elements = {"Line 1", "Line 2"};
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, elements));
प्रत्येक सूची आइटम की नज़र 2.customizing
इसे प्राप्त करने के लिए आपको इनबिल्ट लेआउट और ArrayAdaptor से आगे बढ़ना होगा और इसके बजाय अपना स्वयं का कार्यान्वयन करना होगा।
कक्षा एबीसी बनाकर शुरू करें जिसका उपयोग लेखक और सामग्री दोनों को स्ट्रिंग्स के रूप में रखने के लिए किया जा सकता है। फिर बना सकते हैं और पॉप्युलेट कुछ परीक्षण डाटा के साथ एक वस्तु कस्टम सूची आइटम में प्रदर्शित करने के लिए:
public class ABC {
String userId;
String pwd;
}
/res/layout/list_item.xml
में एक प्रारूप का एक्सएमएल फ़ाइल बनाएं दो TextViews
अलग-अलग पंक्तियों पर सामग्री और लेखक प्रदर्शित करने के लिए परिभाषित करने के लिए। उन्हें एक दूसरे से ऊपर प्रदर्शित करने के लिए, एक लीनरलाइट का उपयोग करें, जिसमें प्रत्येक तत्व को लंबवत (android:orientation="vertical")
प्रस्तुत करने के लिए कॉन्फ़िगर किया गया है।
एक बार एक्सएमएल फ़ाइल बनाई गई है, तो एंड्रॉइड एक्लिप्स प्लगइन स्वचालित रूप से जेनरेट आर फ़ाइल में संदर्भ के रूप में जोड़ देगा। यह आर फ़ाइल आपके प्रोजेक्ट के जेन फ़ोल्डर के तहत रखी जाती है और आपके एक्सएमएल तत्वों और आपके जावा कोड के बीच एक पुल के रूप में कार्य करती है। यह आपके जावा कोड को एक्सएमएल तत्वों और/res फ़ोल्डरों के तहत बनाई गई फ़ाइलों का संदर्भ देने की अनुमति देता है। आपके द्वारा अभी बनाई गई फ़ाइल को अब जावा कोड में R.layout.list_item
के रूप में संदर्भित किया जा सकता है, क्योंकि आप कस्टम सूची एडाप्टर में आगे करेंगे।
ListAdaptor
नामक एक निजी वर्ग (गतिविधि के अंदर) बनाएं जो ArrayAdaptor
उपclasses। इस वर्ग का उपयोग एक ऐरेलिस्ट को प्रदर्शित करने के लिए किया जाना चाहिए, साथ ही ऊपर दिए गए लेआउट में बनाए गए TextViews
पर ऑब्जेक्ट्स को मैप करने का एक तरीका प्रदान करना चाहिए।
यह मैपिंग ListAdaptor को ओवरराइड करता है, और अनुरोधित स्थिति पर डेटा की सामग्री के साथ पॉप्युलेट व्यू ऑब्जेक्ट वापस करना चाहिए। जैसा कि नीचे दिखाया
private class abcListAdaptor extends ArrayAdapter<abc> {
private ArrayList<abc> abc;
public abcListAdaptor(Context context, int textViewResourceId, ArrayList<abc> items) {
super(context, textViewResourceId, items);
this.abc = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_item, null);
}
abc o = abc.get(position);
TextView tt = (TextView) v.findViewById(R.id.uid);
TextView bt = (TextView) v.findViewById(R.id.pwd);
tt.setText(o.userid);
bt.setText(o.pwd);
return v;
}
}
अब onCreate विधि बनाया परीक्षण डाटा के साथ कस्टम सूची एडाप्टर का उपयोग करने के लिए समायोजित किया जा सकता:
कस्टम abcListAdaptor की पूरी कार्यान्वयन से नीचे है
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
abc a = new abc();
a.userid = "tech";
a.pwd = "android";
ArrayList<abc> items = new ArrayList<abc>();
items.add(a);
abcListAdaptor adaptor = new abcListAdaptor(this,R.layout.list_item, items);
setListAdapter(adaptor);
}
3. रिमोट सेवाओं और पार्सिंग डेटा को एक्सेस करना
एंड्रॉइड एसडीके में पैकेज एआईएम डी HTTP-आधारित एपीआई तक पहुंच को सरल बनाने पर डी। अपाचे HTTP कक्षाओं को शामिल किया गया है और org.apache.http package
के तहत पाया जा सकता है।आप सर्वर से वापस आने वाले डेटा को पार्स करने के लिए org.json
कक्षाओं के साथ इन कक्षाओं का उपयोग करेंगे।
हम उस गतिविधि में एक निजी विधि बना सकते हैं जो अनुरोध करता है, परिणाम को पार करता है, और ArrayList
ऑब्जेक्ट्स देता है। नीचे सूचीबद्ध कोड अनुरोध करता है और परिणामस्वरूप JSON array
देखता है, जिसे प्रत्येक पाठ और from_user तत्व निकालने के लिए पुनरावृत्त किया जाता है।
ArrayList<abc> getDetail= new ArrayList<abc>();
try {
HttpClient hc = new DefaultHttpClient();
HttpGet get = new
HttpGet("<a href="http://your URL"></a>");
HttpResponse rp = hc.execute(get);
if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String result = EntityUtils.toString(rp.getEntity());
JSONObject root = new JSONObject(result);
JSONArray sessions = root.getJSONArray("results");
for (int i = 0; i < sessions.length(); i++) {
JSONObject session = sessions.getJSONObject(i);
abc a = new abc();
a.uid = session.getString("user");
a.pwd = session.getString("password");
getDetail.add(a);
}
}
}
catch (Exception e) {
Log.e("Activity", "Error loading JSON", e);
}
अब डमी डेटा आपने पहले जब onCreate विधि में कस्टम सूची एडाप्टर के निर्माण लोड विधि के लिए एक कॉल के साथ प्रयोग किया बदलें।
abcListAdaptor adaptor = new abcListAdaptor(this,R.layout.list_item, load());
4.creating उत्तरदायी यूजर इंटरफेस
अपनी वर्तमान स्थिति में कोड प्रतिसाद नहीं (ANR) संवाद, प्रकट करने के लिए उपयोगकर्ता ने आपके ऐप छोड़ने की उत्साह एक आवेदन पैदा करने के लिए क्षमता है। यह onCreate
जैसी विधियों के भीतर किए जा रहे डेटा के लिए दूरस्थ अनुरोध करने के लंबे समय तक चलने वाले काम के कारण हो सकता है।
लंबे समय से चल कार्यों मुख्य आवेदन धागा (जो यूजर इंटरफेस घटना पाश ड्राइव) पर कभी नहीं किया जाना चाहिए। उन्हें काम करने के लिए बच्चों के धागे में फेंक दिया जाना चाहिए।
जबकि जावा के Thread
कक्षा का उपयोग इस कार्य के लिए किया जा सकता है, इसमें एक जटिलता है कि लंबे समय तक चलने वाला कार्य पूरा होने के बाद, आमतौर पर परिणाम की रिपोर्ट करने के लिए उपयोगकर्ता इंटरफ़ेस को बदलना चाहता है (यानी, एक सूची प्रदर्शित करें अनुरोध से भरा हुआ)।
उपयोगकर्ता इंटरफ़ेस तत्व केवल मुख्य स्थिति से अपना राज्य बदल सकते हैं, क्योंकि एंड्रॉइड UI टूलकिट थ्रेड-सुरक्षित नहीं है, इसलिए पृष्ठभूमि थ्रेड को यूआई में हेरफेर करने के लिए मुख्य थ्रेड पर संदेश भेजने की आवश्यकता है।
शुक्र है, एंड्रॉइड एसडीके एक सुविधाजनक श्रेणी AsyncTask प्रदान करता है, जो यूआई थ्रेड के साथ सुरक्षित रूप से बातचीत करने के लिए एसिंक्रोनस कार्यों के लिए एक आसान तंत्र प्रदान करता है। यह AsyncTask को उप-वर्गीकृत करके और लंबे समय तक चलने वाले कार्य करने के लिए doInBackground विधि को ओवरराइड करके प्राप्त किया जाता है, फिर UI पर किसी भी कुशलता को करने के लिए PostExecute पर ओवरराइड किया जाता है।
जब AsyncTask बनाया गया है (इसे यूआई थ्रेड पर बनाया जाना है) और निष्पादित किया गया है, तो पृष्ठभूमि थ्रेड पर doInBackground विधि लागू की जाती है। पूरा होने पर, onPostExecute विधि को मुख्य UI थ्रेड पर वापस बुलाया जाता है।
अपने ऐप्लिकेशन में इस का उपयोग करने के लिए आपको MyTask बुलाया गतिविधि (कस्टम एडाप्टर वर्ग की तरह) है, जो AsyncTask उपवर्गों के भीतर एक निजी वर्ग को लागू करने की आवश्यकता होगी। आप अपनी पिछली लोड विधि की सामग्री के साथ doInBackground विधि को ओवरराइड कर सकते हैं।
बजाय ArrayList लौटाए जाने, आप गतिविधि में एक उदाहरण चर ताकि डेटा निजी वर्गों में साझा किया जा सकता बनाए रखें। फिर onPostExecute में आप डेटा एडाप्टर को डेटा के साथ सेट कर सकते हैं, जैसा कि पहले क्रिएट में किया गया था। ऑनक्रेट विधि अब माई टास्क ऑब्जेक्ट बनाता है और निष्पादन विधि को कॉल करता है।
बेस्ट साइटेंListView के लिए this & this हैं।
-
सादर
TechEnd
आप JSON की आप दिखाए जाने वाले वस्तुओं एक का एक उदाहरण पोस्ट कर सकते हैं? साथ ही, क्या आप सूची में नाम दिखाना चाहते हैं? –