2017-07-19 75 views
0

我写它使用一个API来获取一些数据,但是我收到以下错误一个简单的Android应用:JSON例外:没有价值对于

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) 

下面是我的代码:

@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); 
} 

}

我想写的应用程序使用这个JSON

回答

2

你是不是解析嵌套JsonArray正确..

这里genre_ids阵列是results阵列

使用下面的代码下:不是

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(); 
} 
1

加入rafsanahmad007点,“得到“如果你使用”选择“你可以得到空值而不是例外

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(); 
}