尝试启动 Activity 时崩溃
Getting Crash When trying to initiate an Activity
应用程序中几乎所有的当前导航都工作得很好,当我对导航的其他部分做同样的事情时。
我在尝试从一个 activity 导航到另一个时遇到此错误:
FATAL EXCEPTION: main
Process: com.package, PID: 15338
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.package/ui.activity.AccountActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getId()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getId()' on a null object reference
at ui.activity.BaseActivity.setInitialFragment(BaseActivity.java:181)
at ui.activity.BaseActivity.setInitialFragment(BaseActivity.java:174)
at ui.activity.BaseActivity.setInitialFragment(BaseActivity.java:160)
at ui.activity.AccountActivity.setInitialFragment(AccountActivity.java:38)
at ui.activity.BaseActivity.onCreate(BaseActivity.java:56)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我可以跟踪 Null 引用的生成位置,并尝试了一些方法来尝试绕过它,但它们都使应用程序崩溃。
这是我启动 activity:
的块
@Override
public void onMyAccountOptionSelected() {
Intent intent = new Intent(this, AccountActivity.class);
startActivity(intent);
}
然后在view.getId()
这里被抓到,这个在baseActivity:
private void setInitialFragment(View view, Fragment fragment) {
if (this.getCurrentFragment() == null) {
FragmentManager fragmentManager = this.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(view.getId(), fragment).commit();
}
}
我最初在扩展我的 baseActivity 的 AccountActivity 中调用 setInitialFragment()
:
@Override
protected void setInitialFragment() {
fragment = (AccountFragment) AccountFragment.newInstance();
setInitialFragment(fragment);
}
正如你在上面看到的,现在有一个 AccountFragment,在这个 class 我从 abstractFragment 扩展并有一个方法来声明一个 newInstance:
public static Fragment newInstance() {
AccountFragment fragment = new AccountFragment();
return fragment;
}
我找不到其他任何地方它可能会影响用于导航到此 activity 的进程。我希望能找到一种快速修复的方法或找到更合适的方法来解决这个问题。
非常感谢任何帮助!
您没有向我们提供真正有用的所有信息。
我想象你的 AccountActivity 中的 setInitialFragment 应该是这样的:
public class AccountActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.container);
AccountFragment fragment = AccountFragment.getInstance();
setInitialFragment(fragment);
}
}
根据您发布的内容,您调用了 2 种不同的方法,即:
setInitialFragment(Fragment fragment);
和这个不一样
setInitialFragment(View view, Fragment fragment)
应用程序中几乎所有的当前导航都工作得很好,当我对导航的其他部分做同样的事情时。
我在尝试从一个 activity 导航到另一个时遇到此错误:
FATAL EXCEPTION: main
Process: com.package, PID: 15338
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.package/ui.activity.AccountActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getId()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getId()' on a null object reference
at ui.activity.BaseActivity.setInitialFragment(BaseActivity.java:181)
at ui.activity.BaseActivity.setInitialFragment(BaseActivity.java:174)
at ui.activity.BaseActivity.setInitialFragment(BaseActivity.java:160)
at ui.activity.AccountActivity.setInitialFragment(AccountActivity.java:38)
at ui.activity.BaseActivity.onCreate(BaseActivity.java:56)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我可以跟踪 Null 引用的生成位置,并尝试了一些方法来尝试绕过它,但它们都使应用程序崩溃。
这是我启动 activity:
的块@Override
public void onMyAccountOptionSelected() {
Intent intent = new Intent(this, AccountActivity.class);
startActivity(intent);
}
然后在view.getId()
这里被抓到,这个在baseActivity:
private void setInitialFragment(View view, Fragment fragment) {
if (this.getCurrentFragment() == null) {
FragmentManager fragmentManager = this.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(view.getId(), fragment).commit();
}
}
我最初在扩展我的 baseActivity 的 AccountActivity 中调用 setInitialFragment()
:
@Override
protected void setInitialFragment() {
fragment = (AccountFragment) AccountFragment.newInstance();
setInitialFragment(fragment);
}
正如你在上面看到的,现在有一个 AccountFragment,在这个 class 我从 abstractFragment 扩展并有一个方法来声明一个 newInstance:
public static Fragment newInstance() {
AccountFragment fragment = new AccountFragment();
return fragment;
}
我找不到其他任何地方它可能会影响用于导航到此 activity 的进程。我希望能找到一种快速修复的方法或找到更合适的方法来解决这个问题。
非常感谢任何帮助!
您没有向我们提供真正有用的所有信息。
我想象你的 AccountActivity 中的 setInitialFragment 应该是这样的:
public class AccountActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.container);
AccountFragment fragment = AccountFragment.getInstance();
setInitialFragment(fragment);
}
}
根据您发布的内容,您调用了 2 种不同的方法,即:
setInitialFragment(Fragment fragment);
和这个不一样
setInitialFragment(View view, Fragment fragment)