java - 当我调用一个功能是切换到模块内的活动的模块时,我的应用程序崩溃了
问题描述
我正在创建一个模块,将活动从用户项目中的当前活动切换到模块内的特定活动。
模块内部是一个类,它充当想要使用库的项目和它应该切换到的活动之间的桥梁。模块中的桥接类如下所示:
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 中。
为什么我会收到此错误,为什么我的代码无法按预期正常工作?
解决方案
启动器不应该是一项活动。它继承自 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);
}
}
推荐阅读
- javascript - ngx-spinner 微调器隐藏 Angular 中的所有其他微调器?
- javascript - 用数据库中的文本替换占位符
- javascript - 使用 useState 和 useEffect 时出现“TypeError:无法读取未定义的属性‘名称’”
- python - 为什么我不能用 django 加载图像?
- jenkins - 在 Kubernetes 中挂载持久“动态”文件的解决方案
- mysql - 对于这种复杂的场景,是否可以在 SQL 中使用递归 CTE 来做到这一点?请建议我任何替代方式
- python - 通过 python 和 EWS 为 Exchange 帐户添加新委托
- extjs - ExtJS 6 tabindex 坏了
- react-native - AWS Cognito Pre Sign Up 触发器未针对托管 UI 运行 Google Auth 需要添加出生日期属性
- javascript - Mapbox GL JS - 将弹出标记与地理定位相结合