这是我的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进入捕获区。谁能指出我在这里做错了什么?
答案 0 :(得分:3)
我认为,这个异常是由不正确的字符串数组声明引起的 你可以使用这个教程 1)声明具有初始大小的Java String数组 如果你事先知道你的数组需要多大,你可以(a)声明一个String数组,然后(b)给它一个这样的初始大小:
public class JavaStringArrayTests
{
private String[] toppings = new String[20];
// more to the class here ...
}
在这个例子中,我们声明一个名为toppings的String数组,然后给它一个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