# JSON Array abfrage beschleunigen



## Hein_Loet (20. Jul 2012)

Erst einmal einen schönen guten Tag an das Forum, da dies mein erster beitrag ist.
Ich bin java anfänger und würde gerne wissen wie man am besten mit einem JSON Array umgeht ohne das mein Programm langsam wird. Habe schon ein paar sachen versucht bekomme es aber einfach nicht hin :rtfm: Ich programmiere Java für android und das ist mein quelltext auszug:

```
public void getKliste(String jobi) {
		String result = "";
		ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

		SharedPreferences settings = getSharedPreferences("SETTINGS",0);
		String host = settings.getString("HOST", null);
		String usr = settings.getString("USER", null);
		String passwd = settings.getString("PASSWORD", null);
		String scripturl = settings.getString("SCRIPT", null);
		
		nameValuePairs.add(new BasicNameValuePair("rw","1"));
		nameValuePairs.add(new BasicNameValuePair("host",host));
		nameValuePairs.add(new BasicNameValuePair("user",usr));
		nameValuePairs.add(new BasicNameValuePair("passwd",passwd));
		nameValuePairs.add(new BasicNameValuePair("from","kliste"));
		nameValuePairs.add(new BasicNameValuePair("where","jobid="+jobi));

		InputStream is = null;
		try {
			HttpClient httpclient = new DefaultHttpClient();
			HttpPost httppost = new HttpPost(scripturl);
			httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
			HttpResponse response = httpclient.execute(httppost);
			HttpEntity entity = response.getEntity();
			is = entity.getContent();
		} catch (Exception e) {
			String error = "Fehler bei der http Verbindung " + e.toString();
			Log.e("log_tag",error);
			Toast.makeText(getdata.this,error,Toast.LENGTH_SHORT).show();
		}
		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					is, "iso-8859-1"), 8);
			StringBuilder sb = new StringBuilder();
			String line = null;
			while ((line = reader.readLine()) != null) {
				sb.append(line + "n");
			}
			is.close();
			result = sb.toString();
		} catch (Exception e) {
			Log.e("log_tag", "Error converting result " + e.toString());
		}
		try {
			JSONArray jArray = new JSONArray(result);
			String insertkliste = "";
			progressDialog.setMax(jArray.length());
			for (int i = 0; i < jArray.length(); i++) {
				json_data = jArray.getJSONObject(i);
				insertkliste += "INSERT INTO kliste (jobid,knr,kuekennr) VALUES ("+
						json_data.getString("jobid")+","+
						json_data.getString("knr")+","+
						json_data.getString("kuekennr")+"); ";
				progressDialog.setProgress(i);
			}
			database.execSQL(insertkliste);	
		} catch (JSONException e) {
			String error = "Error parsing data " + e.toString();
			Log.e("log_tag",error);
			Toast.makeText(getdata.this,error,Toast.LENGTH_SHORT).show();
		}
	}
```


----------



## eRaaaa (20. Jul 2012)

Also was vlt etwas bringen würde wäre, wenn du das JSON Objekt/Array direkt vom Stream lesen/erstellen könntest, dann würden die Zeilen 32-40 also das ganze BufferedReader und StringBuilder hantieren wegfallen. Die JSON Bibliothek Gson (von google) kann das z.B.
Zeilen 50-53 sind bestimmt aber der Teil der Probleme macht. Oben benutzt du schön einen StringBuilder, wäre hier auch zu empfehlen (wenn man schon den Query-String verketten muss/will )!


----------



## Hein_Loet (20. Jul 2012)

danke dir. Der string builder hat geholfen


----------

