【问题标题】:Calling startActivity function on menu crashes the app在菜单上调用 startActivity 函数会使应用程序崩溃
【发布时间】:2019-01-01 09:49:08
【问题描述】:

我正在设置一个项目,它将接收用户的详细信息,将其插入 SQLite 数据库,并将在第二个活动的 ListView 上显示用户提供的信息。

我尝试了很多教程并在互联网上提出建议,尝试了 ActivityForResult,尝试不使用 Switch,但似乎没有任何效果。

public boolean onOptionsItemSelected(MenuItem item) {


    switch (item.getItemId()) {
        case R.id.SecondActivity:
            Intent i = new Intent(this, SecondActivity.class);
            startActivity(i);
            break;
        case R.id.credits:
            Toast.makeText(MainActivity.this,
                    "some text ;)", Toast.LENGTH_LONG).show();
            break;
    }

    return true;

}

我希望它运行第二个活动。但是当我尝试在活动之间切换时它一直在崩溃

【问题讨论】:

  • 请添加本次崩溃的logcat。
  • 您是否在您的AndroidManifest.xml 中添加了SecondActivity
  • 对不起,我不知道该怎么做。
  • 是的,它在 .xml 文件中
  • src/main/AndroidManifest.xml 中,您是否添加了诸如以<activity android:name=".SecondActivity" 开头的内容?

标签: sqlite android-studio android-activity


【解决方案1】:
 case R.id.SecondActivity:
            Intent i = new Intent(this, SecondActivity.class);
            startActivity(i);
            break;

您可能在第二个活动检查中遇到问题,如果它在 AndroidManifest.xml 中存在或不存在

如果不是片段,则在意图调用中使用 Intent i=new Intent(getApplicationContext(),SecondActivity.class);

【讨论】:

    【解决方案2】:

    在你的SecondActivity,第 24 行:

    Cursor getUserData=db.query(HelperDB.TABLE_USER,null,null,null,null,null,null);
    

    然而,此时(在SecondActivity的初始化期间),变量db被声明(第21行)但没有被赋值(它被赋值太晚了,在onCreate()中第 33 行)。请注意,类的<init> 远早于调用此onCreate()

    因此,将这两个Cursor 移动到第 33 行之后(并且可能在第 33 和 34 行之间)将解决这个问题。

    【讨论】:

    • @aslox “不能解决问题”是什么意思?堆栈跟踪(run data 中的第 35 到 59 行)仍然相同吗?
    • 这个新问题是从太早的db.close()生成的。
    • 我尝试将行 24,25 移动到 34,35(在 onCreate 函数内),但效果不佳。观看新的运行数据:pastebin.com/M1ft5uSR
    • @asslox 是的,在新的运行数据中读取第 110 和 115 行,您应该删除 db.close() 行,或者将其放在最底部,例如在 onCreate() 的末尾块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多