首页 > 解决方案 > 当我调用一个功能是切换到模块内的活动的模块时,我的应用程序崩溃了

问题描述

我正在创建一个模块,将活动从用户项目中的当前活动切换到模块内的特定活动。

模块内部是一个类,它充当想要使用库的项目和它应该切换到的活动之间的桥梁。模块中的桥接类如下所示:

 public class Starter extends AppCompatActivity {

    Context context;

    public Starter(Context context){
        this.context = context;
    }

    public void OpenOkraWidget(){
        Intent intent = new Intent(this.context, OkraWebActivity.class);
        startActivity(intent);
    }
}

在上面的意图中调用的 OkraWebActivity.class 是模块内的一个类,其布局也是如此。

在我的主项目类中,我这样调用模块:

    public class ProjectActivity extends AppCompatActivity {

    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_project);

        button = findViewById(R.id.okra_btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openOkraWidget();
            }
        });

    }

    public void openOkraWidget(){
        Starter starter = new Starter(ProjectActivity.this);
        starter.OpenOkraWidget();
    }
}

我的问题是当我尝试运行我得到的代码时

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()”

来自 Intent intent = new Intent(this.context, OkraWebActivity.class); 开始活动(意图);在模块内的 Starter.class 中。

为什么我会收到此错误,为什么我的代码无法按预期正常工作?

标签: javaandroid

解决方案


启动器不应该是一项活动。它继承自 Context 的 startActivity 方法要求该类已经由 Android 管理并由 Android 启动。您应该使用您提供给 Starter 的上下文对象来调用 start 活动。

尝试这个 :

 public class Starter  {

    Context context;

    public Starter(Context context){
        this.context = context;
    }

    public void OpenOkraWidget(){
        Intent intent = new Intent(this.context, OkraWebActivity.class);
        this.context.startActivity(intent);
    }
}

推荐阅读