2016-03-21 17 views
0

私は、後で変数に格納されて使用される値worksheetIDをチェックするjsonarrayを持っています。問題は、この値が存在しないとアンドロイドデバイスがクラッシュし、try catchブロックを通して実行しても、クラッシュすることを止めることはないということです。ここでアンドロイドデバイスがクラッシュする原因となるJson例外

は私のコードです:ここでは

try { 
    try 
    { 
     jsonArray = jsonObject.getJSONArray("WorksheetID"); 
     Log.v("Worked", "WorksheetID is in "); 

    } catch (JSONException e) 
    { 

     Log.v("failed", "No WorksheetID"); 
     Log.v("failed", WorksheetID[0]+""); 
     e.printStackTrace(); 


    } 

    if(WorksheetID[0] != 0) 
    { 
     WorksheetID = new int[jsonArray.length()]; 
     for (int i = 0; i < jsonArray.length(); i++) { 

      try { 
       WorksheetID[i] = jsonArray.getInt(i); 
      } catch (JSONException e) 
      { 
       e.printStackTrace(); 
       Log.v("failed", "cant do loop 2"); 
       WorksheetID[0] = 0; 

      } 
     } 
    } 
    else 
    { 
     return; 
    } 
}catch (Exception e) 
{ 
    WorksheetID[0] = 0; 

} 

は私が取得していますlogcatエラーです。何らかの理由でマシンはキャッチ自体のすべての行を実行しなくても最初のキャッチ後にシャットダウンするようです!あなたがArrayIndexOutは、ArrayIndexOutOfBoundsExceptionを取得しているとしてWorksheetIDがnullの場合は常に

03-21 08:55:42.494 21224-21224/net.azurewebsites.cosy W/System.err﹕ org.json.JSONException: No value for WorksheetID 
03-21 08:55:42.494 21224-21224/net.azurewebsites.cosy W/System.err﹕ at org.json.JSONObject.get(JSONObject.java:355) 
03-21 08:55:42.494 21224-21224/net.azurewebsites.cosy W/System.err﹕ at org.json.JSONObject.getJSONArray(JSONObject.java:549) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at net.azurewebsites.cosy.Classroom.onCreate(Classroom.java:127) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at android.app.Activity.performCreate(Activity.java:5231) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:135) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at android.os.Looper.loop(Looper.java:136) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5001) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy W/System.err﹕ at dalvik.system.NativeStart.main(Native Method) 
03-21 08:55:42.498 21224-21224/net.azurewebsites.cosy V/failed﹕ No WorksheetID 
03-21 08:55:42.506 21224-21224/net.azurewebsites.cosy D/AndroidRuntime﹕ Shutting down VM 
03-21 08:55:42.506 21224-21224/net.azurewebsites.cosy W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xa4d59b20) 
03-21 08:55:42.510 21224-21224/net.azurewebsites.cosy E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: net.azurewebsites.cosy, PID: 21224 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{net.azurewebsites.cosy/net.azurewebsites.cosy.Classroom}: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
      at android.app.ActivityThread.access$800(ActivityThread.java:135) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5001) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
      at net.azurewebsites.cosy.Classroom.onCreate(Classroom.java:163) 
      at android.app.Activity.performCreate(Activity.java:5231) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
            at android.app.ActivityThread.access$800(ActivityThread.java:135) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:136) 
            at android.app.ActivityThread.main(ActivityThread.java:5001) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
+0

あなたはJSONExceptionをキャッチしていますが、ArrayIndexOutOfBoundsExceptionが発生しています。たぶんあなたは別の原因を探すべきでしょう –

+0

配列とそのサイズをどのように宣言したか理解できるようにいくつかのコードを追加できますか? –

+0

WorksheetIDキーパラメータがjsonArrayではありません。あなたの応答json形式を確認してください。 –

答えて

0

変更

if(WorksheetID[0] != 0) 

あなたはウルのコードの間違いがたくさんあるし、そのあなたが実際にやって何をクリアしていません。

は、あなたが、それは例外の型をキャッチすることはできませんので、それがクラッシュした理由であるArrayIndexOutOfBoundsException、ないJSONExceptionを取得しているこの

try 
    { 

     if(jsonObject.has("WorksheetID")){ 

     jsonArray = jsonObject.getJSONArray("WorksheetID"); 


     int[] WorksheetID = new int[jsonArray.length()]; 
     for (int i = 0; i < jsonArray.length(); i++) { 

      try { 
       WorksheetID[i] = jsonArray.getInt(i); 
      } catch (JSONException e) 
      { 
       e.printStackTrace(); 
       Log.v("failed", "cant do loop 2"); 

      } 
     } 


     }else{ 
      Log.v("NoWorksheet", "No WorksheetID available"); 
     } 


    } catch (JSONException e) 
    { 

     Log.v("failed", "No WorksheetID"); 
     e.printStackTrace(); 


    } 
0

、あなたはキャッチブロック内の配列と間違って何かをすることができます。

可能犯人は、この行である:

Log.v( "失敗"、WorksheetID [0] + "")。

配列が空であるか、初期化されていないと思われ、最初の要素(空)にアクセスしようとしているため、ArrayIndexOutOfBoundsExceptionが発生します。

アクセスする前にWorksheetIDが初期化されていることを確認してください。

if(WorksheetID.length > 0 && WorksheetID[0] != 0) 
0

0

を試してみてください。一般的な例外エラーをキャッチする別のtry-catchステートメントを使用したとしても、エラーは2番目のtry-catchステートメントで発生するため、その部分に到達することはできません。アプリをクラッシュさせたくない場合は、JSONExceptionExceptionに変更してください。

関連する問題