【问题标题】:ArrayIndexOutOfBoundsException [closed]ArrayIndexOutOfBoundsException [关闭]
【发布时间】:2014-07-24 09:40:43
【问题描述】:

我在代码中得到 ArrayIndexOutOfBoundsException 请帮助问题出在哪里。 以及如何解决该问题 这是我的活动的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    this.textview = (TextView) findViewById(R.id.textView1);

    // HTTPConnector http = new HTTPConnector();
    GetAllDataTask get = new GetAllDataTask();
    get.execute();
}

public void setTextToTextView(JSONArray jsonArray) {

    String s = "";
    for (int i = 0; i < jsonArray.length(); i++) {

        JSONObject json = null;
        try {
            json = jsonArray.getJSONObject(i);

            s = s + "\n" + "Name =" + json.getString("name") + "\n"
                    + "Contact number = " + json.getInt("contact") + "\n"
                    + "Categroy = " + json.getString("Category");
        } catch (JSONException e) {
            Toast.makeText(getApplicationContext(),
                    "there is some problem", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }
    this.textview.setText(s);
}

private class GetAllDataTask extends
        AsyncTask<HTTPConnector, Long, JSONArray> {

    @Override
    protected JSONArray doInBackground(HTTPConnector... arg0) {
        // TODO Auto-generated method stub
        return arg0[0].GetAllData();
    }

    @Override
    protected void onPostExecute(JSONArray jsonArray) {
        // TODO Auto-generated method stub
        setTextToTextView(jsonArray);
    }

}

这是我从这个问题中得到的堆栈跟踪的一部分:

07-24 14:27:36.059: E/AndroidRuntime_2_crash(27865): crash in the same process: 
07-24 14:27:36.059: E/AndroidRuntime_2_crash(27865): java.lang.RuntimeException: An error occured while executing doInBackground()
07-24 14:27:36.059: E/AndroidRuntime_2_crash(27865):    at android.os.AsyncTask$3.done(AsyncTask.java:278)
07-24 14:27:36.059: E/AndroidRuntime_2_crash(27865): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0

【问题讨论】:

  • 我猜某个地方的数组索引超出范围...
  • HTTPConnector... arg0 在某些时候必须为空。
  • 如果数组的长度为零(如错误消息中所述),则索引 0 上没有条目。

标签: android


【解决方案1】:

问题出在这里:

@Override
protected JSONArray doInBackground(HTTPConnector... arg0) {
    // TODO Auto-generated method stub
    return arg0[0].GetAllData();
}

您正在获取HTTPConnector 数组的第一个索引,但您从未将任何HTTPConnector 传递给AsyncTask:

GetAllDataTask get = new GetAllDataTask();

// Here you need to pass a HTTPConnector to the AsyncTask
get.execute();

所以你需要做这样的事情:

GetAllDataTask get = new GetAllDataTask();
get.execute(httpConnector);

【讨论】:

  • 是的,没错..thanx
【解决方案2】:

ArrayIndexOutOfBounds 异常发生在您的数组大小小于迭代例如 如果您的数组大小为 5 并且您尝试访问数组的第 6 个元素这是不可行的,那么就会出现这种异常

在你的情况下

我认为 JSONArray.length 的长度是问题,请通过调试器检查 这就是为什么你的代码会出现这种异常

【讨论】:

  • 问题不在于JSONArray...查看我对实际问题的回答。
猜你喜欢
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 2019-06-19
相关资源
最近更新 更多