2017-07-19 2 views
0
私はしかし、私は次のようなエラーになっていますいくつかのデータをフェッチするためにAPIを使用した簡単なAndroidアプリ書いています

に値:JSON例外:

@Override 
protected void onPostExecute(String s) { 
    try { 
     JSONObject jsonObject = new JSONObject(result); 
     JSONArray jsonStrings = jsonObject.getJSONArray("genre_ids"); 
     String strings[] = new String[jsonStrings.length()]; 

     for(int i=0;i<strings.length;i++) { 
      strings[i] = jsonStrings.getString(i); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    super.onPostExecute(s); 
} 
:以下

System.err: org.json.JSONException: No value for genre_ids 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at org.json.JSONObject.get(JSONObject.java:389) 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at org.json.JSONObject.getJSONArray(JSONObject.java:584) 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at com.adeel.android.movieinfoapp.Networking.onPostExecute(Networking.java:72) 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at com.adeel.android.movieinfoapp.Networking.onPostExecute(Networking.java:21) 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at android.os.AsyncTask.finish(AsyncTask.java:632) 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at android.os.Looper.loop(Looper.java:145) 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5832) 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at java.lang.reflect.Method.invoke(Method.java:372) 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
07-19 18:12:08.164 24204-24204/com.adeel.android.movieinfoapp W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

は私のコードです

}

私が書こうとしているアプリは、このJSONを使用しています。 「

try { 
    JSONObject jsonObject = new JSONObject(s); //string pass to your onPostExecute() 
    JSONArray result = jsonObject.getJSONArray("results"); 
    for(int j=0;i<result.length;j++) { 
     JSONObject inner = result.getJSONObject(j); 
     JSONArray jsonStrings = inner.getJSONArray("genre_ids"); 
     String strings[] = new String[jsonStrings.length()]; 
     for(int i=0;i<strings.length;i++) { 
      strings[i] = jsonStrings.getString(i); 
     } 
    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

答えて

2

..ここ

genre_ids配列は、次のコードを使用results配列

の下にありますあなたが "opt"を使用する場合は、例外の代わりにヌル値を得ることができます

try { 
    JSONObject jsonObject = new JSONObject(s); 
    JSONArray resultArray = jsonObject.optJSONArray("results"); 

    if (resultArray == null) { 
     Log.d("MM", "Json array is null"); 

     return; 
    } 
    for (int i = 0; i < resultArray.length(); i++) { 
     JSONObject resultObj = resultArray.getJSONObject(i); 

     if (resultObj == null) { 
      continue; 
     } 

     JSONArray jsonStrings = jsonObject.optJSONArray("genre_ids"); 

     if (jsonStrings != null) { 
      String strings[] = new String[jsonStrings.length()]; 

      for (int j = 0; j < strings.length; j++) { 
       strings[j] = jsonStrings.optString(j); 
      } 
     } 

    } 


} catch (JSONException e) { 
    e.printStackTrace(); 
} 
1

追加点をrafsanahmad007するため、代わりに:あなたは適切にネストされたJsonArrayを解析していない