我使用以下方法,但每次使用它都会出错。 我无法弄清楚为什么因为我执行此检查
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;
}
答案 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
,因为您返回的是list
空list
。所以它不是null
,也没有length
答案 4 :(得分:0)
unWanted
不是null
并不意味着您可以使用unWanter[0]
来引用它是第一个元素,因为它可能是一个空数组。