- Forum-Beiträge: 38
25.08.2011, 09:41:25 via Website
25.08.2011 09:41:25 via Website
ich habe folgendes Problem:
Ich muss aus zwei Json Datein jede Menge Daten (ca. 2000 Einträge) einlesen, und diese dann in einer Listview darstellen.
Ich habe in einer Datei unteranderem die Nummer von einem jeweiligen Objekt, und die Referenz zu dem dazugehörigen Text. Dieser befindet sich in der zweiten Json Datei und wird jedes mal mit ausgelesen. Gemacht habe ich das so, weil ich mehrere Sprachen unterstützen will.
dh meine erste json Datei hat folgende Struktur:
2 "parameter":
3{
4"nr":"r000002",
5"label":"000002",
6...
7},
8{
9"nr":"p000003",
10"label":"000003",
11...
12}
13...
und die zweite sieht folgendermaßen aus:
2 "label":
3 {
4 "name":"000003",
5 "string":"name1"
6 },
7 {
8 "name":"000004",
9 "string":"name2"
10 },
11 {
12 "name":"000010",
13 "string":"name3"
14 }
15...
Ich lese zuerst mittels Buffered Reader die json Dateien ein:
2 ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
3 JSONObject joPara = null;
4 JSONObject joLang = null;
5 BufferedReader br = new BufferedReader(new InputStreamReader(is));
6 StringBuilder sb = new StringBuilder();
7 String line = null;
8
9 try {
10 while ((line = br.readLine()) != null) {
11 sb.append(line + "\n");
12 }
13 is.close();
14 br.close();
15 joPara = new JSONObject(sb.toString());
16
17 } catch (Exception e) {
18 Log.e("Error", "Fehler beim Parameter json Objekt erzeugen " + e.toString());
19 }
Das mache ich für beide Json Dateien. Was auch noch recht zügig klappt.
Dannach füge ich die Daten so wie sie nachher dargestellt werden sollen in eine Arraylist ein. Und hier schau ich bei jedem Eintrag nach wie der dazugehörige Name lautet, was ziemlich viel Zeit frisst.
Der Code dazu:
2
3 JSONArray parameter = joPara.getJSONArray("parameter");
4 for (int i = 0; i < parameter.length(); i++) {
5 HashMap<String, String> map = new HashMap<String, String>();
6 JSONObject e = parameter.getJSONObject(i);
7 String.valueOf(i);
8 map.put("nr", e.getString("nr"));
9 map.put("name", findName.find(e.getString("label"), joLang));
10 map.put("help", e.getString("help"));
11 mylist.add(map);
12 }
13 } catch (JSONException e) {
14 Log.e("log_tag", "Error parsing data " + e.toString());
15 }
16 adapter = new SimpleAdapter(this, mylist, R.layout.listview_layout,
17 new String[] { "nr", "name" }, new int[] { R.id.lv_nr,
18 R.id.lv_titel });
2
3
4
5 try {
6
7 JSONArray label = jo.getJSONArray("label");
8
9 for (int i = 0; i < label.length(); i++) {
10
11 JSONObject e = label.getJSONObject(i);
12 String vergleich = e.getString("name");
13 if (vergleich.equals(s))
14 return e.getString("string");
15 }
16 } catch (JSONException e) {
17 Log.e("log_tag", "Error parsing data " + e.toString());
18 }
19
20 return "no data" ;
21 }
Ich bin für jeden Ratschlag wie mach das ganze performanter gestalten kann dankbar!
Viele Grüße
Chris
— geändert am 25.08.2011, 09:42:05
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.