2013-07-25 68 views
0

我有一些代碼連接到互聯網並拉取數據 - 如果它無法連接到URL - 它會顯示錯誤屏幕,但是當它到達錯誤屏幕/佈局時用戶收到強制關閉錯誤,我需要弄清楚如何防止這種情況發生。Android應用程序強制關閉錯誤佈局

來源:

if (version < VERSION_CODES.ICE_CREAM_SANDWICH) { 

     try { 
      // updating layout initially has updating text with 1 dot in the 
      // xml 
      setContentView(R.layout.updating); 
      // This image view has the updating text to be progressively 
      // updated 
      // with dots addition 
      ImageView loading = (ImageView) findViewById(R.id.loading_empty1); 
      // Button goButton = (Button) findViewById(R.id.loading_empty); 
      // Set updating button to drawable animation 
      loading.setBackgroundResource(R.drawable.updating1); 
      loadingAnimation = (AnimationDrawable) loading.getBackground(); 

      ImageView loading2 = (ImageView) findViewById(R.id.loading_empty2); 
      // Button goButton = (Button) findViewById(R.id.loading_empty); 
      // Set updating button to drawable animation 
      loading2.setBackgroundResource(R.drawable.updating2); 
      loadingAnimation = (AnimationDrawable) loading2.getBackground(); 

      // mProgressImageview = (ImageView) 
      // findViewById(R.id.updating_text); 
      // mLoadingCircle = (ImageView) 
      // findViewById(R.id.updating_hand); 

      tasks.execute("https://dl.dropboxusercontent.com/u/3177165644456456/GetPhoneSettings-rsp-eng.xml"); 
      if (tasks.get() != null) { 
       stream = tasks.getInputStream(); 
       Log.v("CfA", "here"); 

      }else { 
       setContentView(R.layout.error); 
       //finish(); 
      } 

的logcat:

01-01 00:14:28.175: E/AndroidRuntime(5253): FATAL EXCEPTION: AsyncTask #2 
01-01 00:14:28.175: E/AndroidRuntime(5253): java.lang.RuntimeException: An error occured while executing doInBackground() 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at android.os.AsyncTask$3.done(AsyncTask.java:200) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at java.lang.Thread.run(Thread.java:1019) 
01-01 00:14:28.175: E/AndroidRuntime(5253): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at java.util.ArrayList.get(ArrayList.java:311) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at com.project.example.datasettings.ConfigFinalActivity.getValues(ConfigFinalActivity.java:355) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at com.project.example.datasettings.ConfigFinalActivity.InsertAPN(ConfigFinalActivity.java:324) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at com.project.example.datasettings.ConfigFinalActivity.updateTable(ConfigFinalActivity.java:676) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at com.project.example.datasettings.ConfigFinalActivity.access$0(ConfigFinalActivity.java:643) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at com.project.example.datasettings.ConfigFinalActivity$TableUpdateRequestTask.doInBackground(ConfigFinalActivity.java:548) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at com.project.example.datasettings.ConfigFinalActivity$TableUpdateRequestTask.doInBackground(ConfigFinalActivity.java:1) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
01-01 00:14:28.175: E/AndroidRuntime(5253):  ... 4 more 
01-01 00:14:28.400: D/CLIPBOARD(5253): Hide Clipboard dialog at Starting input: finished by someone else... ! 
+0

你可能要編輯的是Dropbox的鏈接... – Simon

回答

1

Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

無論您使用的是陣列/ ArrayList中,檢查它是否是空的之前:

MyObject obj = myArray[0];   // For an array 

MyObject obj = myArrayList.get(0); // For an arraylist 

從您發佈的logcat輸出中,您的AsyncTask看起來像myArray[0]。用您的AsyncTask代碼編輯問題。

對於數組,請執行下列檢查:

if (myArray.length > 0) { 

    // go crazy within bounds 

} 

對於一個ArrayList:

if (myArrayList.size() > 0) { 

    // go crazy within bounds 

} 
+0

似乎是這是造成錯誤的ArrayList。已初始化但爲空。 ConfigFinalActivity.java:355 – DigCamara

+0

@DigCamara當你的評論出現時正在編輯。謝謝! – Vikram

0

除了@vikram,你玩之前使用數組檢查

if(yourArray.size() > 0){ 
    // 
} 

如果您更改陣列,請使用Vector(Vector is synchronized。),以防止出現此問題。

或使用:

List yourArray= Collections.synchronizedList (yourArray);