字符串数组索引错误

时间:2013-05-12 06:33:00

标签: android arrays

我使用以下方法,但每次使用它都会出错。 我无法弄清楚为什么因为我执行此检查

if(unWanted == null || unWanted[0] == null)

错误在此代码中:

unWanted[0] == null

但如果我只做

 if(unWanted == null)

它没有看到unWaned为null。

感谢帮助:)

错误代码:

05-12 06:24:41.293: E/AndroidRuntime(24373): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.workoutlog/com.example.workoutlog.AddWorkOutPage}: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0

我的方法:

public void checking(){

        DataBaseMain data = new DataBaseMain(this);
        data.open();
        String[] unWanted = data.getAllUnwantedExercies();  
        data.close();

        if(unWanted == null || unWanted[0] == null)
                    Toast.makeText(this, "good", Toast.LENGTH_LONG).show();
            else
        Toast.makeText(this, "bad", Toast.LENGTH_LONG).show();

从我的数据库中获取String数组的方法。

   public String[] getAllUnwantedExercies() {

        Cursor c = ourDatabase.query(true, TABLE_NAME, new String[] {COLUMN_NOT_ON_LIST_EXERCISE}, null, null, COLUMN_NOT_ON_LIST_EXERCISE, null, null, null);

        int dayExercise = c.getColumnIndex(COLUMN_NOT_ON_LIST_EXERCISE);

        if(c.getCount() < 1)
            return null;

        int f = 0;

        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){

            if(c.getString(dayExercise) != null && c.getString(dayExercise).equals("") == false)
                f++;
        }

        String[] list = new String[f];

        int j = 0;
        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
            if(c.getString(dayExercise) != null && c.getString(dayExercise).equals("") == false){
            list[j] = c.getString(dayExercise);
            j++;
            }
        }

        return list;
    }

5 个答案:

答案 0 :(得分:3)

unWanted[0] == null

很明显,你的数组中没有值。尝试引用长度为0的数组的第一个索引(如堆栈跟踪中所述)是运行时错误。

unWanted == null

这不起作用,因为数组对象本身不为空。

解决方法

这里的一个简单解决方案是,在函数结束时,检查数组的长度。如果它为0,则表示它没有值,您可以返回null。

if(list.length == 0)
{
    return null;
}
else
{
    return list;
}

或更简洁:

return list.length == 0? null:list;

然后,当您从函数中获取数组时,您需要做的就是测试以检查数组是否为空。

if(unWanted == null)
{
    // Array is empty.
}

答案 1 :(得分:0)

也许只需更改此行:

if(unWanted == null || unWanted[0] == null)

通过这个:

if(unWanted.length <= 0)

答案 2 :(得分:0)

unWanted[0] == null

在这里,您要检查数组的第一个位置是否为null。而不是检查您的数组大小是否为0

if(unWanted.length==0){
   // your code
}

我希望这会对你有所帮助。

答案 3 :(得分:0)

您需要检查length是否大于0.这不是null,因为您返回的是listlist。所以它不是null,也没有length

答案 4 :(得分:0)

unWanted不是null并不意味着您可以使用unWanter[0]来引用它是第一个元素,因为它可能是一个空数组。