HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://my.server:8080/Android/service.php");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("action", "getjson"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
service.php
generiert eine Json-Zeichenfolge. Wie würde ich es von meiner response
holen? Übrigens; Ich habe die GSON
-Bibliothek mit einbezogen, kann ich vielleicht irgendwelche Methoden verwenden?
Lösungen, die diesem ähnlich sind, sehen ziemlich hässlich aus, imo: der beste Weg, um Json von httpresponse Android zu handhaben
Es gibt viel bessere Wege, richtig?
Jede Hilfe wird geschätzt, danke
Update:
String json = EntityUtils.toString(response.getEntity());
scheint den Trick zu tun. Es gibt nur ein kleines Problem: Der String wird in Klammern []
eingeschlossen. Soll ich sie manuell entfernen? Sie werden von PHP erzeugt: s json_encode()
Ich denke, das Problem, auf das Sie stoßen, ist eines, das meinem ähnlich ist, auf das ich gerade gestoßen bin. Wenn du läufst:
String json_string = EntityUtils.toString (response.getEntity ()); JSONObject temp1 = neues JSONObject (json_string);
Der obige Code löst eine Ausnahme aus und es sieht so aus, als wären die Klammern des JSON-Arrays verantwortlich. Aber es ist in Ordnung, ein JSON-Array als oberstes Element zu haben! Sie müssen nur JSONArray () anstelle von JSONObject verwenden:
String json_string = EntityUtils.toString (response.getEntity ()); JSONArray temp1 = neuer JSONArray (json_string);
Sie müssen also wissen, ob Sie in Ihrem JSON-Code ein JSONArray oder ein einzelnes Wörterbuch, das ein JSONObject ist, erhalten.
Wenn Sie an die iOS/Objective-C-JSON-Parsing-Bibliotheken gewöhnt sind, verwenden sie dasselbe Element der obersten Ebene, um mit Json-Wörterbüchern und Json-Arrays umzugehen. Daher verwirrte mich der Wechsel in die Java/Android-Welt darüber, dass es zwei Typen für den Umgang mit JSON gibt Top-Level zurückgegeben.
Mit dieser Klasse können Sie die JSON-Daten entweder von einem Server oder von Ihrem Assets-Ordner abrufen. Es kann leicht zu einem oder dem anderen geändert werden. Wenn Sie einen Adapter benötigen, verwenden Sie den hier erstellten jgilfelt auf getHub .
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Bundle getArgs = this.getArguments();
String URI = getArgs.getString(KEY_URI);//OR YOU CAN HARD CODE THIS OR GET THE STRING ANYWAY YOU LIKE.
new GetJSONTask().execute(URI);
}
class GetJSONTask extends AsyncTask<String, Integer, String> {
protected String doInBackground(String... arg0) {
String uri = arg0[0];
InputStream is = null;
if (uri.contains("http") == true) {// Get JSON from URL
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(uri);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
BufferedReader rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
while ((line = rd.readLine()) != null) {
json += line;
}
rd.close();
return json;
} catch (Exception e) {
e.printStackTrace();
return null;
}
} else {// Get JSON from Assets
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try {
InputStream jsonFile = getActivity().getAssets().open(uri);
Reader reader = new BufferedReader(new InputStreamReader(jsonFile, "UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
jsonFile.close();
} catch (IOException e) {
e.printStackTrace();
}
json = writer.toString();
// return JSON String
return json;
}
}
@Override
protected void onPostExecute(String result) {
try {
showData(result);
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getActivity(), "something went wrong", Toast.LENGTH_SHORT).show();
}
}
}
private void showData(String json) throws JSONException {
JSONObject o = new JSONObject(json);
JSONArray data = o.getJSONArray("results");
}
}
Das Problem war in meiner PHP-Datei. Das Entfernen des Container-Arrays aus dem json-codierten Objekt hat meinen Java-Code zum Laufen gebracht.
Wenn ich eine JSON-Zeichenfolge von meinem Webservice zurücksende, möchte ich sie normalerweise wie folgt in ein JSON-Objekt zurückholen:
String response = client.getResponse();
if (responseCode == 200)
{
JSONObject obj = new JSONObject(response);
}