首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决AsyncTask中的异常

如何解决AsyncTask中的异常
EN

Stack Overflow用户
提问于 2012-10-11 18:14:00
回答 1查看 1.4K关注 0票数 0

这是我的AsyncTask。在AsyncTask中获取异常..

代码语言:javascript
复制
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) {

    }

}

我正在执行任务,并像这样获取值。

代码语言:javascript
复制
  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方法中遇到异常。

代码语言:javascript
复制
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块。谁能指出我在这里做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-11 18:19:56

我认为,这个由不正确的字符串数组声明引起的异常可以在本教程中使用1)声明具有初始大小的Java字符串数组如果你预先知道你的数组需要多大,你可以(a)声明一个字符串数组并(b)给它一个初始大小,如下所示:

代码语言:javascript
复制
public class JavaStringArrayTests
{
  private String[] toppings = new String[20];
  // more to the class here ...
}

在本例中,我们声明了一个名为toppings的字符串数组,然后将其初始大小设置为20个元素。

稍后,在类的Java方法中,可以像这样填充字符串数组中的元素:

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12837231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档