从 Android 上的 Class 启动 Activity 时出错
Error starting Activity from a Class on Android
我有以下 class SubMenuToolBar
,我通常从构造函数中传递自身 (this
) 的 activity (MainActivity
) 实例化实例化时:
public class SubMenuToolBar extends Activity {
private android.support.v7.widget.Toolbar mToolbar;
private Activity mActivity;
RelativeLayout mLayout;
public SubToolbar(android.support.v7.widget.Toolbar toolbar, Activity activity) {
mActivity = activity;
mToolbar = toolbar;
mLayout = (RelativeLayout) mToolbar.findViewById(R.id.layout_toolbar);
mLayout.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(mActivity, UserMessagesActivity.class);
startActivity(intent);
}
});
}
MainActivity.cs
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new SubMenuToolBar ((android.support.v7.widget.Toolbar) findViewById(R.id.sub_toolbar), this);
}
每次我点击用点击事件处理程序注册的元素(在 activity 中)我都会得到一个常见的错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
11-20 08:31:33.422 23802-23802/com.xxx.apps.xxx E/AndroidRuntime: at android.app.Activity.startActivityForResult(Activity.java:3918)
11-20 08:31:33.422 23802-23802/com.xxx .apps.xxx E/AndroidRuntime: at android.app.Activity.startActivityForResult(Activity.java:3877)
11-20 08:31:33.422 23802-23802/com.xxx.apps.xxx E/AndroidRuntime: at android.app.Activity.startActivity(Activity.java:4200)
11-20 08:31:33.422 23802-23802/com.xxx.apps.xxx E/AndroidRuntime: at android.app.Activity.startActivity(Activity.java:4168)
11-20 08:31:33.422 23802-23802/com.xxx.apps.xxx E/AndroidRuntime: at com.xxx.apps.xxx.SubMenuToolBar.onClick(SubToolbar.java:28)
我试过在 Intent 中使用 Activity,activity 中的 Context,getApplicationContext 和 getBaseContext。全部在线抛出相同的错误:
Intent intent = new Intent(mActivity, MessagesActivity.class);
我已经检查过 SO 和各种 Web 资源,其中大多数指向 activity 需要传递给 class 所以它的上下文用于 Intent,我已经这样做了你可以在上面看到并确保调用 Activity 的所有细节都已传递并使用,问题仍然存在。
知道我做错了什么吗?
尝试替换这个:
Intent intent = new Intent(mActivity, UserMessagesActivity.class);
startActivity(intent);
对此:
Intent intent = new Intent(mActivity, UserMessagesActivity.class);
mActivity.startActivity(intent);
你有点糊涂了。 Activity 不能用 new
实例化。您必须使用 Intent
启动它。有两项活动,但我认为您只需要一项。
public class SubMenuToolBar extends Activity {
RelativeLayout mLayout;
@Override
protected void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
setContentView(R.layout.your_activity_layout);
android.support.v7.widget.Toolbar mToolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.sub_toolbar);
mLayout = (RelativeLayout)mToolbar.findViewById(R.id.layout_toolbar);
mLayout.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(mActivity, UserMessagesActivity.class);
startActivity(intent);
});
}
并使用 SubMenuToolBar 作为您的主要 activity。
我有以下 class SubMenuToolBar
,我通常从构造函数中传递自身 (this
) 的 activity (MainActivity
) 实例化实例化时:
public class SubMenuToolBar extends Activity {
private android.support.v7.widget.Toolbar mToolbar;
private Activity mActivity;
RelativeLayout mLayout;
public SubToolbar(android.support.v7.widget.Toolbar toolbar, Activity activity) {
mActivity = activity;
mToolbar = toolbar;
mLayout = (RelativeLayout) mToolbar.findViewById(R.id.layout_toolbar);
mLayout.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(mActivity, UserMessagesActivity.class);
startActivity(intent);
}
});
}
MainActivity.cs
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new SubMenuToolBar ((android.support.v7.widget.Toolbar) findViewById(R.id.sub_toolbar), this);
}
每次我点击用点击事件处理程序注册的元素(在 activity 中)我都会得到一个常见的错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
11-20 08:31:33.422 23802-23802/com.xxx.apps.xxx E/AndroidRuntime: at android.app.Activity.startActivityForResult(Activity.java:3918)
11-20 08:31:33.422 23802-23802/com.xxx .apps.xxx E/AndroidRuntime: at android.app.Activity.startActivityForResult(Activity.java:3877)
11-20 08:31:33.422 23802-23802/com.xxx.apps.xxx E/AndroidRuntime: at android.app.Activity.startActivity(Activity.java:4200)
11-20 08:31:33.422 23802-23802/com.xxx.apps.xxx E/AndroidRuntime: at android.app.Activity.startActivity(Activity.java:4168)
11-20 08:31:33.422 23802-23802/com.xxx.apps.xxx E/AndroidRuntime: at com.xxx.apps.xxx.SubMenuToolBar.onClick(SubToolbar.java:28)
我试过在 Intent 中使用 Activity,activity 中的 Context,getApplicationContext 和 getBaseContext。全部在线抛出相同的错误:
Intent intent = new Intent(mActivity, MessagesActivity.class);
我已经检查过 SO 和各种 Web 资源,其中大多数指向 activity 需要传递给 class 所以它的上下文用于 Intent,我已经这样做了你可以在上面看到并确保调用 Activity 的所有细节都已传递并使用,问题仍然存在。
知道我做错了什么吗?
尝试替换这个:
Intent intent = new Intent(mActivity, UserMessagesActivity.class);
startActivity(intent);
对此:
Intent intent = new Intent(mActivity, UserMessagesActivity.class);
mActivity.startActivity(intent);
你有点糊涂了。 Activity 不能用 new
实例化。您必须使用 Intent
启动它。有两项活动,但我认为您只需要一项。
public class SubMenuToolBar extends Activity {
RelativeLayout mLayout;
@Override
protected void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
setContentView(R.layout.your_activity_layout);
android.support.v7.widget.Toolbar mToolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.sub_toolbar);
mLayout = (RelativeLayout)mToolbar.findViewById(R.id.layout_toolbar);
mLayout.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(mActivity, UserMessagesActivity.class);
startActivity(intent);
});
}
并使用 SubMenuToolBar 作为您的主要 activity。