java - java类崩溃中的startActivity

标签 java android start-activity

我正在为一个学校项目开发一个 Android 应用程序,我遇到了以下问题。我有一个带有 ButtonSecondActivityMainActivity。当我单击 MainActivity 中的按钮时,它必须打开 SecondActivity。我在我的两台设备(三星 galaxy s9+ 和华硕 zenfone2)上测试了它:

MainActivity.java

public class MainActivity extends AppCompatActivity {
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,SecondActivity.class)
                startActivity(intent);
            }
        });
}
}

这在两种设备上都能正常工作,当我点击按钮时,它会正确打开 SecondActivity。

问题是当我添加一个 Controller 类并尝试在其中启动 SecondActivity 时。这是 Controller 类:

Controller.java

public class Controller {
    public void open(Context cont){
        Intent intent=new Intent(cont,SecondActivity.class);
        cont.getApplicationContext().startActivity(intent);
     }
  }

然后我以这种方式更改 MainActivity:

public class MainActivity extends AppCompatActivity {
    Button button;
    Controller c;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button2);
        c=new Controller();

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                c.open(getApplicationContext());
            }
        });
}
}

这在我的 s9+ 上运行良好,而在我的 zenfone2 上单击按钮时崩溃。问题出在哪里?如果不正确,为什么适用于 s9+?

谢谢

最佳答案

从 Android P 开始,除非添加 Intent.FLAG_ACTIVITY_NEW_TASK 标志,否则您无法使用应用程序上下文启动 Activity。因此,只需更改您的 Controller 和 mainactivity 以改为使用 mainactivity 上下文。

c.open(MainActivity.this);

public void open(Context context) {
    Intent intent = new Intent(context, SecondActivity.class);
    context.startActivity(intent);
}

或者

public void open(Context context) {
    Intent intent = new Intent(context.getApplicationContext(), SecondActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}

关于java - java类崩溃中的startActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52687908/

相关文章:

java - 生成5分钟的随机数

java - SelectOneMenu 更新其他 SelectOneMenu

java - 删除 TreeSet 的匹配元素

java - 寻找复杂项目集合的最佳组合?

java - 让 Android 查找 Date 并计算此时与现在之间的天数

java - 为什么在选择联系人之前调用 onActivityResult?

android - 启动 Activity 不工作

android - 调用两种类型的 Intent

android - BroadcastReceiver 还是服务?

android - 我的应用程序在 startActivity() 上崩溃