为了账号安全,请及时绑定邮箱和手机立即绑定

java类崩溃中的startActivity

java类崩溃中的startActivity

红糖糍粑 2021-11-03 14:57:04
我正在为学校项目开发 Android 应用程序,但遇到以下问题。我有MainActivity一个Button和SecondActivity。当我单击 中的按钮时,MainActivity它必须打开SecondActivity. 我在我的两台设备(三星 Galaxy s9+ 和华硕 zenfone2)上进行了测试:主活动.javapublic 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。问题是当我添加一个控制器类并尝试在其中启动SecondActivity时。这是控制器类:控制器.javapublic 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+ 上有效?
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

从 Android P 开始,除非您添加 Intent.FLAG_ACTIVITY_NEW_TASK 标志,否则您无法使用应用程序上下文启动活动。因此,只需更改您的控制器和 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);

}


查看完整回答
反对 回复 2021-11-03
?
桃花长相依

TA贡献1860条经验 获得超8个赞

getApplicationContext()在 open 函数中从 Controller 类中删除。做了cont.startActivity(intent);


查看完整回答
反对 回复 2021-11-03
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

你不能调用startActivity从getApplicationContext了,你不需要调用它这么多次。


getApplicationContext用“这个”代替。


button.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                c.open(MainActivity.class);

            }

        });

然后只需调用 startActivity


public class Controller {

    public void open(Context cont){

        Intent intent=new Intent(cont,SecondActivity.class);

        cont.startActivity(intent);

     }

  }


查看完整回答
反对 回复 2021-11-03
  • 3 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信