0

我使用以下方法,但每次使用时都会出错。我不知道为什么,因为我执行了这个检查

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();

从我的数据库中获取字符串数组的方法。

   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;
    }
4

5 回答 5

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.
}
于 2013-05-12T06:35:44.273 回答
0
unWanted[0] == null

在这里,您正在尝试检查数组的第一个位置是否null存在。而不是这个检查你的数组大小是否0

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

我希望这能帮到您。

于 2013-05-12T06:41:41.837 回答
0

您需要检查length是否大于 0。这不是null因为您返回 alist尽管是空的list。所以它不是null但也没有length

于 2013-05-12T06:43:13.757 回答
0

unWantedis notnull并不意味着您可以通过 using 引用它是第一个元素,unWanter[0]因为它可能是一个空数组。

于 2013-05-12T06:43:19.843 回答
0

也许只是改变这一行:

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

通过这个:

if(unWanted.length <= 0)
于 2013-05-12T06:37:34.570 回答