Android 安卓:代码行为疯狂

Android 安卓:代码行为疯狂,android,eclipse,debugging,Android,Eclipse,Debugging,我在eclipse上为android开发时遇到了一个非常奇怪的问题 我的程序总是返回非sense语句,所以我试着调试它 现在我明白问题是什么了。。。。 …代码简直是疯了-完全不合逻辑 这是我的代码: ArrayList<String[]> formatedVerses = readAndSplitDatabaseFile(database, books); if (formatedVerses.size() < 1) { // check if readAndSplitDat

我在eclipse上为android开发时遇到了一个非常奇怪的问题

我的程序总是返回非sense语句,所以我试着调试它

现在我明白问题是什么了。。。。 …代码简直是疯了-完全不合逻辑

这是我的代码:

ArrayList<String[]> formatedVerses = readAndSplitDatabaseFile(database, books);

if (formatedVerses.size() < 1) { // check if readAndSplitDatabaseFile worked
    createDatabase(database, false); // if not. the database wasnt initialized
    formatedVerses = readAndSplitDatabaseFile(database, books); // try again 
}

return formatedVerses;
这毫无意义

我觉得有人在跟我开玩笑

我就是不能把我的心放在这上面

我还尝试重新构造代码。。。 但它只会变得更奇怪

我还尝试了其他实现。例如:

if (formatedVerses.size() < 1) {
return array1;
} else{
doSomethingElse();
return array2;
}
然后,当我点击下一步时,它实际上从那条线跳到了下一步
返回else块内部的array2
行,同时完全省略
doSomethingElse()
-行

有人有什么想法吗?
因为我现在快疯了…

通常当我看到这样的行为时,是因为我没有运行我认为正在运行的代码。我还没有做过Android开发,所以我不能具体地说,但是你是否在项目菜单下勾选了“自动构建”?我发现,为了大大减少我看到这种行为的次数

您是否尝试过清理代码并进行完整的重建?您是使用Eclipse还是在远程设备上运行?如果在远程设备上,您是否已将代码发布到该设备

正如我所说,我还没有做过任何Android开发,所以从Andriod开发的角度来看,其中一些问题似乎是显而易见的


希望这些想法能有所帮助。

通常当我看到这样的行为时,是因为我没有运行我认为正在运行的代码。我还没有做过Android开发,所以我不能具体地说,但是你是否在项目菜单下勾选了“自动构建”?我发现,为了大大减少我看到这种行为的次数

您是否尝试过清理代码并进行完整的重建?您是使用Eclipse还是在远程设备上运行?如果在远程设备上,您是否已将代码发布到该设备

正如我所说,我还没有做过任何Android开发,所以从Andriod开发的角度来看,其中一些问题似乎是显而易见的


希望这些想法能有所帮助。

对我来说,听起来你的牙套在某种程度上错位了。它似乎忽略了if语句周围的大括号,这样处理它

if (formatedVerses.size() < 1) // check if readAndSplitDatabaseFile worked
    createDatabase(database, false); // if not. the database wasnt initialized
formatedVerses = readAndSplitDatabaseFile(database, books); // try again 
if(formattedverses.size()<1)//检查readAndSplitDatabaseFile是否工作
createDatabase(数据库,false);//如果没有。数据库未初始化
formattedverses=readAndSplitDatabaseFile(数据库、书籍);//再试一次
但这并不能真正解释你的第二个例子

编辑:或者您的第二个块也在奇怪地解析。。但是没有解释为什么代码在返回语句之后继续

if (formatedVerses.size() < 1) 
    return array1;
else
    doSomethingElse();
return array2;
if(formattedverses.size()<1)
返回阵列1;
其他的
doSomethingElse();
返回阵列2;

对我来说,听起来你的牙套在某种程度上错位了。它似乎忽略了if语句周围的大括号,这样处理它

if (formatedVerses.size() < 1) // check if readAndSplitDatabaseFile worked
    createDatabase(database, false); // if not. the database wasnt initialized
formatedVerses = readAndSplitDatabaseFile(database, books); // try again 
if(formattedverses.size()<1)//检查readAndSplitDatabaseFile是否工作
createDatabase(数据库,false);//如果没有。数据库未初始化
formattedverses=readAndSplitDatabaseFile(数据库、书籍);//再试一次
但这并不能真正解释你的第二个例子

编辑:或者您的第二个块也在奇怪地解析。。但是没有解释为什么代码在返回语句之后继续

if (formatedVerses.size() < 1) 
    return array1;
else
    doSomethingElse();
return array2;
if(formattedverses.size()<1)
返回阵列1;
其他的
doSomethingElse();
返回阵列2;

为了详细说明aperkins所说的话(完全正确),Eclipse调试器使用代码编译成.class文件时的行号信息,并使用源.java文件显示正在运行的代码行。所以,假设你写下:

if (readAndSplitDatabaseFile(database, books).size() < 1) { 
    createDatabase(database, false); // if not. the database wasnt initialized
    formatedVerses = readAndSplitDatabaseFile(database, books); // try again 
}

return formatedVerses;
if(readAndSplitDatabaseFile(database,books).size()<1){
createDatabase(database,false);//如果不是。数据库未初始化
formattedverses=readAndSplitDatabaseFile(数据库,书籍);//重试
}
返回格式的诗句;
构建并运行,然后添加一行代码和一个空行:

ArrayList<String[]> formatedVerses = readAndSplitDatabaseFile(database, books);

if (formatedVerses.size() < 1) { // check if readAndSplitDatabaseFile worked
    createDatabase(database, false); // if not. the database wasnt initialized
    formatedVerses = readAndSplitDatabaseFile(database, books); // try again 
}

return formatedVerses;
ArrayList formattedverses=readAndSplitDatabaseFile(数据库,书籍);
如果(formattedverses.size()<1){//检查readAndSplitDatabaseFile是否工作
createDatabase(database,false);//如果不是。数据库未初始化
formattedverses=readAndSplitDatabaseFile(数据库,书籍);//重试
}
返回格式的诗句;

现在,当您进行调试时,您将逐步完成第一个示例,但将查看第二个示例。aperkins提到的解决方案只是重新构建并运行,或者撤销更改,直到它们与上次编译时的更改相匹配。

为了详细说明aperkins所说的话,Eclipse调试器使用了代码编译到.class文件时的行号信息,并使用source.java文件显示正在运行的代码行。所以,假设你写下:

if (readAndSplitDatabaseFile(database, books).size() < 1) { 
    createDatabase(database, false); // if not. the database wasnt initialized
    formatedVerses = readAndSplitDatabaseFile(database, books); // try again 
}

return formatedVerses;
if(readAndSplitDatabaseFile(database,books).size()<1){
createDatabase(database,false);//如果不是。数据库未初始化
formattedverses=readAndSplitDatabaseFile(数据库,书籍);//重试
}
返回格式的诗句;
构建并运行,然后添加一行代码和一个空行:

ArrayList<String[]> formatedVerses = readAndSplitDatabaseFile(database, books);

if (formatedVerses.size() < 1) { // check if readAndSplitDatabaseFile worked
    createDatabase(database, false); // if not. the database wasnt initialized
    formatedVerses = readAndSplitDatabaseFile(database, books); // try again 
}

return formatedVerses;
ArrayList formattedverses=readAndSplitDatabaseFile(数据库,书籍);
如果(formattedverses.size()<1){//检查readAndSplitDatabaseFile是否工作
createDatabase(database,false);//如果不是。数据库未初始化
formattedverses=readAndSplitDatabaseFile(数据库,书籍);//重试
}
返回格式的诗句;
现在,当您进行调试时,您将逐步完成第一个示例,但将查看第二个示例。解决方案a