android活动创建时出现奇怪的2 NullPointerException

android活动创建时出现奇怪的2 NullPointerException,android,Android,请帮忙,我已经深入了解了onSaveInstanceState和onConfigChange的内容,但无法了解情况 我发布的应用程序通过Google Play报告了例外情况,但我无法在我的开发环境中复制它。跟踪后发现PreviewActivity的onCreate方法中发生了2个NullPointerException: 第1期: (a) 。PreviewActivity的onCreate方法中的代码: public void onCreate(Bundle savedInstanceState

请帮忙,我已经深入了解了onSaveInstanceState和onConfigChange的内容,但无法了解情况

我发布的应用程序通过Google Play报告了例外情况,但我无法在我的开发环境中复制它。跟踪后发现PreviewActivity的onCreate方法中发生了2个NullPointerException:

第1期:

(a) 。PreviewActivity的onCreate方法中的代码:

public void onCreate(Bundle savedInstanceState) {
   setContentView(R.layout.logo_preview_layout);
   ...

   mBtnCheckGuess = (Button)findViewById(R.id.btn_check_guess);  
   mVgGuessPanel = (View)findViewById(R.id.layout_guess); // the exception line!

   ...

}
(b) 。布局xml中的代码(仅部分)

这两天来,我没有收到新发布版本应用程序的相同问题。我完全不知道为什么

第二期: 背景,我想在a启动B时将一个对象从活动a传递到活动B,我使用Android的应用程序对象将该对象包含在其实例变量中

(a) MyApplication的代码:

public class MyApplication extends Application{
Logo mSelectedLogo;

@Override
public void onCreate(){
}

public void setSelectedLogo(Logo logo){
    mSelectedLogo = logo;
}
public Logo getSelectedLogo(){
    return this.mSelectedLogo;
}
}
(b) 活动A的部分代码

mApplication.setSelectedLogo(logo);
            Intent intent = new Intent(this, ActivityB.class);
            LogoListActivity.this.startActivityForResult(intent, REQUEST_GUESS);
(c) 活动代码B

public void onCreate(Bundle savedInstanceState) {
    ...
    MyApplication mApplication = (MyApplication)this.getApplication();
    mSelectedLogo = mApplication.getSelectedLogo();
    ALog.d(TAG, "correct logo name: " + mSelectedLogo.mName + ", id: " + mSelectedLogo.mId); // NullPointerException line, obviously mApplication.getSelectedLogo() returns NULL
    ...
}
真奇怪为什么它会是空的。除非MyApplication对象已被销毁

错误日志在这里:


java.lang.RuntimeException:无法启动活动组件信息{com.codefes.quick/com.codefes.quick.PreviewActivity}:java.lang.NullPointerException
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)上
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)上
在android.app.ActivityThread.access,售价1500美元(ActivityThread.java:117)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)上
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:123)
位于android.app.ActivityThread.main(ActivityThread.java:3687)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:507)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.NullPointerException
位于com.codefes.quick.PreviewActivity.onCreate(未知源)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)上
... 还有11个


请帮忙,谢谢

假设您有一个布局文件,该文件已放置在layout potrait中。如果用户切换到横向(如果活动未标记为仅potrait),则不会设置布局

因此,当设备或应用程序处于低阶状态时,不会使用高阶资源(或在某些情况下只是不同阶资源)


由于您输入了大量configChange字符串,请检查您是否有适合所有场景的布局。

什么是null?空值在哪里?它太复杂,太宽,无法集中注意力。是否设置内容视图?对于问题1,此行为空:mVgGuessPanel=(视图)findViewById(R.id.layou猜);对于问题2,此行为空:ALog.d(标记“正确的徽标名称:”+mSelectedLogo.mName+”,id:“+mSelectedLogo.mId”);我在这个活动的清单中有这个属性--android:screenOrientation=“肖像”,所以我认为这个活动只标记为potrait。清单中的configChange是一个错误,它不应该存在。删除configChange属性后,此错误似乎消失了。此外,我从未提供任何onConfigChange()方法。但由于此错误发生在onCreate()上,因此可能与onConfigChange()无关。。。
public class MyApplication extends Application{
Logo mSelectedLogo;

@Override
public void onCreate(){
}

public void setSelectedLogo(Logo logo){
    mSelectedLogo = logo;
}
public Logo getSelectedLogo(){
    return this.mSelectedLogo;
}
}
mApplication.setSelectedLogo(logo);
            Intent intent = new Intent(this, ActivityB.class);
            LogoListActivity.this.startActivityForResult(intent, REQUEST_GUESS);
public void onCreate(Bundle savedInstanceState) {
    ...
    MyApplication mApplication = (MyApplication)this.getApplication();
    mSelectedLogo = mApplication.getSelectedLogo();
    ALog.d(TAG, "correct logo name: " + mSelectedLogo.mName + ", id: " + mSelectedLogo.mId); // NullPointerException line, obviously mApplication.getSelectedLogo() returns NULL
    ...
}