Android Activity 导致应用程序崩溃,但据我所知,它在任何时候都没有被调用

Posted

技术标签:

【中文标题】Android Activity 导致应用程序崩溃,但据我所知,它在任何时候都没有被调用【英文标题】:Android Activity causing app to crash, but it is not being called at any point as far as I can see 【发布时间】:2014-08-20 19:50:43 【问题描述】:

在 OilPlots 类中,我有以下方法,它应该加载 Activity BoPlot:

OnClickListener OilList = new OnClickListener() 

    public void onClick(View view) 

        Intent intent = new Intent(OilPlots.this, BoPlots.class);
        startActivity(intent);
    
    ;

下面是 BoP​​lots 的 onCreate() 方法:

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

        setup();        
        color(button4, R.id.buttonLayout ,R.id.button4);

        Button btn = (Button)findViewById(R.id.bo);
        btn.setOnClickListener(BoList);

    

我第一次加载 Activity BoPlot 时它加载正常,但如果我尝试从 OilPlots 类访问它,它会使应用程序崩溃。日志如下:

08-18 22:06:15.649: E/androidRuntime(32339): FATAL EXCEPTION: main
08-18 22:06:15.649: E/AndroidRuntime(32339): java.lang.RuntimeException: Unable to start activity ComponentInfocom.example.resengin/com.example.resengin.BoPlots: java.lang.NullPointerException
08-18 22:06:15.649: E/AndroidRuntime(32339):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at android.app.ActivityThread.access$600(ActivityThread.java:130)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at android.os.Looper.loop(Looper.java:137)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at android.app.ActivityThread.main(ActivityThread.java:4745)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at java.lang.reflect.Method.invokeNative(Native Method)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at java.lang.reflect.Method.invoke(Method.java:511)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at dalvik.system.NativeStart.main(Native Method)
08-18 22:06:15.649: E/AndroidRuntime(32339): Caused by: java.lang.NullPointerException
08-18 22:06:15.649: E/AndroidRuntime(32339):    at java.lang.StringToReal.parseFloat(StringToReal.java:285)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at java.lang.Float.parseFloat(Float.java:300)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at java.lang.Float.valueOf(Float.java:337)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at com.example.resengin.BoResults.onCreate(BoResults.java:74)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at com.example.resengin.BoPlots.onCreate(BoPlots.java:20)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at android.app.Activity.performCreate(Activity.java:5008)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
08-18 22:06:15.649: E/AndroidRuntime(32339):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
08-18 22:06:15.649: E/AndroidRuntime(32339):    ... 11 more

据我了解,崩溃的原因是:

08-18 22:06:15.649: E/AndroidRuntime(32339): Caused by: java.lang.NullPointerException
08-18 22:06:15.649: E/AndroidRuntime(32339):    at java.lang.StringToReal.parseFloat(StringToReal.java:285)

由于变量尚未实例化而导致崩溃。 这似乎是指的代码行在 Activity BoResults 中。此 Activity 的 onCreate 方法如下:

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

        setup();        
        color(button3, R.id.buttonLayout ,R.id.button3);

        txt1=(TextView)findViewById(R.id.results).findViewById(R.id.editText1);
        txt2=(TextView)findViewById(R.id.results).findViewById(R.id.editText2);
        txt3=(TextView)findViewById(R.id.results).findViewById(R.id.editText3);

        Intent intent = getIntent();        

        Float Pressure = Float.valueOf(intent.getStringExtra("V1"));
        Float Temp = Float.valueOf(intent.getStringExtra("V2"));
        Float STOG = Float.valueOf(intent.getStringExtra("V3"));
        Float SG = Float.valueOf(intent.getStringExtra("V4"));
        Float SGOR = Float.valueOf(intent.getStringExtra("V5"));


        txt1.setText(String.valueOf(Pressure));
        txt2.setText(String.valueOf(Temp));
        txt3.setText(String.valueOf(STOG));   

        spreadsheet();

    

但我不明白为什么要调用它,因为代码中没有任何意义引用 BoResults Activity 中的任何内容或调用任何方法。 BoPlots 确实扩展了 BoResults

【问题讨论】:

我认为我们需要更多信息。 setup() 和电子表格() 是什么样的?我的猜测是那里发生了一些事情。 【参考方案1】:

所以 BoPlots 扩展了 BoResults?在您的 BoPlots onCreate 方法中,您正在调用 super.onCreate ,它将调用 BoResults 版本。因此,如果您没有在 BoPlots 意图中添加 BoResults 所需的相同附加功能,它将崩溃。听起来你不应该扩展 BoResults。

【讨论】:

【参考方案2】:

如果键的映射值不存在,getStringExtra 返回null。如果您尝试将null 转换为float,应用程序将崩溃

【讨论】:

以上是关于Android Activity 导致应用程序崩溃,但据我所知,它在任何时候都没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

如何获得Android的崩溃日志

ViewDataBinding 导致在 activity.finish() 后恢复应用程序崩溃,NPE 在视图附件期间访问 mRebindRunnable

Activity 崩溃生命周期方法 - android

单击链接时,Android WebView 崩溃

Android WebView Activity 启动然后在 5.1.1 上崩溃

RestKit 数据映射导致应用程序崩溃