versuchen, Ordnung so versuche ich Daten aus JSON der Listen zu ziehen, wie dies:JSONException: Probleme zum Abrufen von Daten aus JSON
{"code":200,"status":"OK","data":{"timings":{"Fajr":"04:17","Sunrise":"05:30","Dhuhr":"12:20","Asr":"15:42","Sunset":"19:11","Maghrib":"19:11","Isha":"20:24","Imsak":"04:07","Midnight":"00:20"},"date":{"readable":"17 Jun 2017","timestamp":"1497652236"}}}
ausschließlich die spezifischen Gebete. Mein Code, um die Daten zu finden, ist wie folgt:
class SaveTheFeed extends AsyncTask<Void, Void, Void>{
String jsonString = "";
String result = "";
EditText chosenCity = (EditText) findViewById(R.id.editText3);
String city = chosenCity.getText().toString();
@Override
protected Void doInBackground(Void... voids) {
DefaultHttpClient httpClient = new DefaultHttpClient(new BasicHttpParams());
HttpPost httpPost = new HttpPost("http://api.aladhan.com/timingsByCity?city=" + city + "&country=AE&method=2");
httpPost.setHeader("Content-type", "application/json");
InputStream inputStream;
try{
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
inputStream = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
StringBuilder builder = new StringBuilder();
String line;
while ((line = reader.readLine()) !=null){
builder.append(line + "\n");
}
jsonString = builder.toString();
JSONObject jObject = new JSONObject(jsonString);
JSONObject data = (JSONObject) jObject.get("data");
JSONArray jArray = (JSONArray) data.get("timings");
outputTimings(jArray);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
TextView prayerTimes = (TextView) findViewById(R.id.prayerTimes);
prayerTimes.setText(result);
}
protected void outputTimings(JSONArray jsonArray){
String[] prayers= {"Fajr", "Sunrise", "Dhuhr", "Asr", "Sunset", "Maghrib", "Isha", "Imsak", "Midnight"};
try{
for(int i = 0; i < jsonArray.length(); i++){
JSONObject cityObject =
jsonArray.getJSONObject(i);
result = result + prayers[i] + " : "+
cityObject.getString(prayers[i]) + "\n";
}
ich diesen Fehler, die auf Linie zeigt 85 (die JSONObject jObject = new JSONObject (jsonString); line)
06-17 00:24:15.973 2866-2907/azanmute.android.com.azanmute W/System.err: org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject 06-17 00:24:15.973 2866-2907/azanmute.android.com.azanmute W/System.err: at org.json.JSON.typeMismatch(JSON.java:111) 06-17 00:24:15.974 2866-2907/azanmute.android.com.azanmute W/System.err: at org.json.JSONObject.(JSONObject.java:160) 06-17 00:24:15.974 2866-2907/azanmute.android.com.azanmute W/System.err: at org.json.JSONObject.(JSONObject.java:173) 06-17 00:24:15.974 2866-2907/azanmute.android.com.azanmute W/System.err: at azanmute.android.com.azanmute.MainActivity$SaveTheFeed.doInBackground(MainActivity.java:85) 06-17 00:24:15.974 2866-2907/azanmute.android.com.azanmute W/System.err: at azanmute.android.com.azanmute.MainActivity$SaveTheFeed.doInBackground(MainActivity.java:60) 06-17 00:24:15.974 2866-2907/azanmute.android.com.azanmute W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:305) 06-17 00:24:15.974 2866-2907/azanmute.android.com.azanmute W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237) 06-17 00:24:15.974 2866-2907/azanmute.android.com.azanmute W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 06-17 00:24:15.974 2866-2907/azanmute.android.com.azanmute W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 06-17 00:24:15.974 2866-2907/azanmute.android.com.azanmute W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 06-17 00:24:15.974 2866-2907/azanmute.android.com.azanmute W/System.err: at java.lang.Thread.run(Thread.java:761)
Also mein Verständnis ist, dass Im auf die Daten falsch zeigt oder JSONObjects mit JSONArrays verwechselt. Ich habe bereits beide und this versucht, aber immer noch den gleichen Fehler erhalten.
Von der Ausnahme, würde ich sagen, das Problem ist, Ihr String jsonString ist kein gültiger JSON-String. Kannst du hier ein Debug setzen und den exakten Wert von jsonString kurz vor l angeben? 85? – jdebon
Drucken Sie einfach, was Sie in HTTP-Antwort erhalten, um sicher zu sein, dass die URL Ihnen eine gültige JSON-Antwort sendet. – Zakir
Also, was ist Zeile 85 von 'MainActivity.java'? Es ist * immer * nützlich, Dinge auf ein [mcve] zu reduzieren - es gibt eine Menge irrelevanter Code in deiner Frage im Moment. –