2012-10-11 121 views
0

這是我的AsyncTask。在AsyncTask中獲得例外..如何解決AsyncTask中的異常

private class GetCategories extends AsyncTask<String, Void, String[]> { 
    String temp[] = new String[] {}; 
    protected String[] doInBackground(String... urls) { 
     JSONParser jParser = new JSONParser(); 
     JSONArray category_details; 
     try { 
      URL url = new URL(urls[0]); 
      JSONObject json = jParser.getJSONFromUrl(url.toString()); 
      category_details = json.getJSONArray("cat"); 
      for (int i = 0; i < category_details.length(); i++) { 
       JSONObject obj = category_details.getJSONObject(i); 
       temp[i] = obj.getString("catName"); 
      } 
      return temp; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 

    } 

    @Override 
    protected void onPostExecute(String[] temp) { 

    } 

} 

我正在完成任務並獲取像這樣的值。

try { 
     String[] test = new GetCategories().execute(categories_url).get(); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

但我得到這樣的錯誤。我在doInBackground方法中遇到異常。

10-11 15:26:47.207: W/System.err(5158): java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
10-11 15:26:47.207: W/System.err(5158):  at com.example.fragments.CatFragment$GetCategories.doInBackground(CategoriesFragment.java:207) 
10-11 15:26:47.207: W/System.err(5158):  at com.example.fragments.CatFragment$GetCategories.doInBackground(CategoriesFragment.java:1) 
10-11 15:26:47.207: W/System.err(5158):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
10-11 15:26:47.207: W/System.err(5158):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
10-11 15:26:47.207: W/System.err(5158):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
10-11 15:26:47.207: W/System.err(5158):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
10-11 15:26:47.207: W/System.err(5158):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
10-11 15:26:47.207: W/System.err(5158):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
10-11 15:26:47.207: W/System.err(5158):  at java.lang.Thread.run(Thread.java:856) 

207行進入catch塊。任何人都可以指出我在這裏做錯了什麼嗎?

+0

請出示例外本身,不僅通話疊加。謝謝。 – MByD

回答

3

我認爲,這個異常引起的不正確的字符串數組聲明 您可以使用此本教程 1)聲明一個Java String數組的初始大小 如果你知道了前面的陣列需要多大的空間,你可以(a)宣佈一個字符串數組和(b)給它一個這樣的初始大小:

public class JavaStringArrayTests 
{ 
    private String[] toppings = new String[20]; 
    // more to the class here ... 
} 

在這個例子中,我們聲明命名澆頭一個字符串數組,然後給它20種元素的初始大小。

後來,在你的類的Java方法,你可以填充String數組,像這樣的內容:

void populateStringArray() 
{ 
    toppings[0] = "Cheese"; 
    toppings[1] = "Pepperoni"; 
    toppings[2] = "Black Olives"; 
    // ... 
} 

來源:http://alvinalexander.com/java/java-string-array-reference-java-5-for-loop-syntax

+0

謝謝。這是我的錯誤。 – intrepidkarthi