在某些设备模拟器上运行应用程序时出现错误,这是由于代码跳来跳去。在Galaxy S9中,(跟踪)代码从
跳转ordering = ...(在switch语句上方) 直接进入switch语句的情况1:incompleteSearch 然后回到案例0:databaseAccess.getCursor_anagrams(term,filters,ordering);
由于term =“”
而出错我尝试了清洁和重建,没什么区别。
private Cursor getCursor(int searchType) {
EditText et = findViewById(R.id.etEntry);
String term = et.getText().toString();
Spinner beginnings = findViewById(R.id.BeginsWith);
String begins = beginnings.getSelectedItem().toString();
Spinner endings = findViewById(R.id.EndsWith);
String ends = endings.getSelectedItem().toString();
Spinner sp = findViewById(R.id.MinLength);
if (!(searchType == 3)) {
term = term.replaceAll("[cv*0123456789.,^+-]", "");
et.setText(term);
}
String filters = makefilters(searchType);
ordering = getSortOrder();
// todo get from control, method
databaseAccess.open();
switch (searchType) {
case 0:
if (term != "")
return databaseAccess.getCursor_anagrams(term, filters, ordering);
else
incompleteSearch();
break;
case 1:
int count = sp.getSelectedItemPosition() + 1;
etTerm.setText("");
if (count > 1)
return databaseAccess.getCursor_ByLetterCount(count, filters, ordering);
else
incompleteSearch();
break;
答案 0 :(得分:0)
该应用程序具有两个构建变体,唯一的区别是数据库源文件和应用程序名称。 第一个变体工作正常,但是当我尝试另一个构建变体时,我开始遇到这个问题。
我通过重建项目(“构建”>“重建项目”)使其能够正常工作(并跟踪)。
答案 1 :(得分:0)
在将Java字节码编译为dex字节码时,Android Studio dexer可能会进行一些优化并将所有return语句合并为一个,并且在调试代码时,看起来好像是在case语句之间随机跳转。不是,您不应该担心。
您说“ term”变量为“”,因此Android Studio可能在incompleteSearch()中添加了return语句。
如果与在Android Studio上看到的代码相比,设备上安装的代码有些过时(例如,在修改代码时),请将调试器附加到已安装的旧版本,然后进入该功能,弹出窗口将显示“源代码与字节码不匹配”