2014-03-25 24 views
0

我有下一個錯誤:java.lang.IndexOutOfBoundsException:Index:0,Size:0我希望有人可以幫我解決這個問題。我想我需要檢查字符串不是null,但我不知道如何在下一個代碼中實現它。如何在switch-case上實現outofbound

這是我的代碼:

03-25 15:22:40.893: E/AndroidRuntime(617): FATAL EXCEPTION: main 
03-25 15:22:40.893: E/AndroidRuntime(617): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
03-25 15:22:40.893: E/AndroidRuntime(617): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
03-25 15:22:40.893: E/AndroidRuntime(617): at java.util.ArrayList.get(ArrayList.java:304) 
03-25 15:22:40.893: E/AndroidRuntime(617): at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337) 
03-25 15:22:40.893: E/AndroidRuntime(617): at android.widget.AdapterView.getItemAtPosition(AdapterView.java:763) 
03-25 15:22:40.893: E/AndroidRuntime(617): at it.nad.cartellecliniche.PatientPageActivity$1.onItemClick(PatientPageActivity.java:224) 
03-25 15:22:40.893: E/AndroidRuntime(617): at android.widget.AdapterView.performItemClick(AdapterView.java:298) 
03-25 15:22:40.893: E/AndroidRuntime(617): at android.widget.AbsListView.performItemClick(AbsListView.java:1086) 
03-25 15:22:40.893: E/AndroidRuntime(617): at it.nad.cartellecliniche.PatientPageActivity.fillVisiteList(PatientPageActivity.java:253) 
03-25 15:22:40.893: E/AndroidRuntime(617): at it.nad.cartellecliniche.PatientPageActivity.onTaskComplete(PatientPageActivity.java:593) 
03-25 15:22:40.893: E/AndroidRuntime(617): at it.nad.cartellecliniche.asynctask.SearchVisiteTask.onPostExecute(SearchVisiteTask.java:263) 
03-25 15:22:40.893: E/AndroidRuntime(617): at it.nad.cartellecliniche.asynctask.SearchVisiteTask.onPostExecute(SearchVisiteTask.java:1) 
03-25 15:22:40.893: E/AndroidRuntime(617): at android.os.AsyncTask.finish(AsyncTask.java:631) 
03-25 15:22:40.893: E/AndroidRuntime(617): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
03-25 15:22:40.893: E/AndroidRuntime(617): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
03-25 15:22:40.893: E/AndroidRuntime(617): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-25 15:22:40.893: E/AndroidRuntime(617): at android.os.Looper.loop(Looper.java:137) 
03-25 15:22:40.893: E/AndroidRuntime(617): at android.app.ActivityThread.main(ActivityThread.java:4745) 
03-25 15:22:40.893: E/AndroidRuntime(617): at java.lang.reflect.Method.invokeNative(Native Method) 
03-25 15:22:40.893: E/AndroidRuntime(617): at java.lang.reflect.Method.invoke(Method.java:511) 
03-25 15:22:40.893: E/AndroidRuntime(617): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
03-25 15:22:40.893: E/AndroidRuntime(617): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
03-25 15:22:40.893: E/AndroidRuntime(617): at dalvik.system.NativeStart.main(Native Method) 



    public void onTaskComplete(Object[] output) { 
     super.onTaskComplete(output); 
     Integer resultOperation = (Integer) output[0]; 
     if (output != null && resultOperation != 500) { 
      String typeTask = (String) output[1]; 
       if (typeTask.equals("SearchListVisite")) { 
        switch (resultOperation) { 

         case 200: { 
         Visita[] visite_current_patient = (Visita[]) output[2];       
         fillVisiteList(visite_current_patient); 
         break; 
        } 
         case 204: { 
         Visita[] visitaEmpty = createVisteListEmpty(); 
         fillVisiteList(visitaEmpty); 
         break; 
        } 
        } 
      } 
     } else { 
      CharSequence testo = "Errore!"; 
      int duration = Toast.LENGTH_SHORT; 

      Toast toast = Toast.makeText(this, testo, duration); 
      toast.setGravity(Gravity.CENTER, 0, 0); 
      toast.show(); 
      onBackPressed(); 
     } 

    } 
+0

發佈堆棧跟蹤請 – kmera

+0

你有一個空對象「輸出」整數resultOperation =(整數)輸出[0];'你應該檢查**之前使用其元素數組**的長度。有**無元素0 **,如果長度爲0. –

回答

0

我發現這個解決方案蒙山不同的if語句:

如果(visite_current_patient.length < 2)

public void onTaskComplete(Object[] output) { 
    super.onTaskComplete(output); 
    Integer resultOperation = (Integer) output[0]; 

    if (output != null && resultOperation != 500) { 
     String typeTask = (String) output[1]; 
     if (typeTask.equals("SearchListVisite")) { 
      switch (resultOperation) { 
      case 200: 
       Visita[] visite_current_patient = (Visita[]) output[2]; 
       if(visite_current_patient.length < 2) { 
        visite_current_patient = createVisteListEmpty(); 
       } 
       fillVisiteList(visite_current_patient); 
       break; 
      case 204: 
       Visita[] visitaEmpty = createVisteListEmpty(); 
       fillVisiteList(visitaEmpty); 
       break; 
      } 

    } else { 
     CharSequence testo = "Errore!"; 
     int duration = Toast.LENGTH_SHORT; 
     Toast toast = Toast.makeText(this, testo, duration); 
     toast.setGravity(Gravity.CENTER, 0, 0); 
     toast.show(); 
     onBackPressed(); 
    } 
    } 
} 
0

招行:

Integer resultOperation = (Integer) output[0]; 

if語句內,以防止NullPointerException。並添加條件:

output.length >= 3 

我做了重構,並希望這我沒有破壞任何東西。但是您沒有提供所有類型,使之在我的IDE編譯:

public void onTaskComplete(Object[] output) { 
    super.onTaskComplete(output); 
    if (output != null && output.length >= 3) { 
     Integer resultOperation = (Integer) output[0]; 
     String typeTask = (String) output[1]; 
     if (typeTask.equals("SearchListVisite")) { 
      switch (resultOperation) { 
      case 200: 
       Visita[] visite_current_patient = (Visita[]) output[2];       
       fillVisiteList(visite_current_patient); 
       break; 
      case 204: 
       Visita[] visitaEmpty = createVisteListEmpty(); 
       fillVisiteList(visitaEmpty); 
       break; 
      } 
     } 
    } else { 
     CharSequence testo = "Errore!"; 
     int duration = Toast.LENGTH_SHORT; 
     Toast toast = Toast.makeText(this, testo, duration); 
     toast.setGravity(Gravity.CENTER, 0, 0); 
     toast.show(); 
     onBackPressed(); 
    } 
} 
+0

除了在這種情況下resultOperation沒有定義。 – njzk2