Android在某些设备上跳来跳去

时间:2018-11-19 15:53:12

标签: java android

在某些设备模拟器上运行应用程序时出现错误,这是由于代码跳来跳去。在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;

2 个答案:

答案 0 :(得分:0)

该应用程序具有两个构建变体,唯一的区别是数据库源文件和应用程序名称。 第一个变体工作正常,但是当我尝试另一个构建变体时,我开始遇到这个问题。

我通过重建项目(“构建”>“重建项目”)使其能够正常工作(并跟踪)。

答案 1 :(得分:0)

在将Java字节码编译为dex字节码时,Android Studio dexer可能会进行一些优化并将所有return语句合并为一个,并且在调试代码时,看起来好像是在case语句之间随机跳转。不是,您不应该担心。

您说“ term”变量为“”,因此Android Studio可能在incompleteSearch()中添加了return语句。

如果与在Android Studio上看到的代码相比,设备上安装的代码有些过时(例如,在修改代码时),请将调试器附加到已安装的旧版本,然后进入该功能,弹出窗口将显示“源代码与字节码不匹配”