简体   繁体   English

E/AndroidRuntime:致命例外:请主要

[英]E/AndroidRuntime: FATAL EXCEPTION: main PLEASE

First app I am trying to create.我正在尝试创建的第一个应用程序。 Just to enter values and store these values in to a file.只需输入值并将这些值存储到文件中。 I have been trying to figure it out but having issues.我一直试图弄清楚但有问题。 I would love some advise or a solution to my issues.我很想为我的问题提供一些建议或解决方案。

The coding seems correct but app crashes as soon as I open.编码似乎正确,但应用程序一打开就崩溃。

If you can explain to me where my error is or better ways of executing what I am trying to achieve I would appreciate it.如果你能向我解释我的错误在哪里,或者更好地执行我想要实现的目标,我将不胜感激。

I am also not sure how to get the values as specifics eg weight in kg, bloodsugar as mmol/L etc.我也不确定如何获得具体的值,例如以公斤为单位的体重,以 mmol/L 为单位的血糖等。

package com.example.mybodyrecord;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

    String myBodyRecord = "My_Body_Record.txt";
    Date date = new Date();
    SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm");
    File file = new File(getApplicationContext().getFilesDir(),myBodyRecord);

    Button button;

    EditText weightInput;
    EditText ketoneBloodInput;
    EditText ketoneUrineInput;
    EditText bloodPressureInput;
    EditText bloodSugarInput;

    String weight;
    String ketoneBlood;
    String ketoneUrine;
    String bloodPressure;
    String bloodSugar;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

….
    }
}

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mybodyrecord, PID: 26820
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.mybodyrecord/com.example.mybodyrecord.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2843)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
    at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:116)
    at com.example.mybodyrecord.MainActivity.<init>(MainActivity.java:22)
    at java.lang.Class.newInstance(Native Method)
    at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
    at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2831)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:193) 
    at android.app.ActivityThread.main(ActivityThread.java:6669) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(Run

Put this line in onCreate将此行放入onCreate

File file = new File(getApplicationContext().getFilesDir(), myBodyRecord);

and replace getApplicationContext with this like so:并像this替换getApplicationContext

File file = new File(this.getFilesDir(), myBodyRecord);

Your error is caused by getApplicationContext returning null.您的错误是由getApplicationContext返回 null 引起的。

public class MainActivity extends AppCompatActivity {

    String myBodyRecord = "My_Body_Record.txt";
    Date date = new Date();
    SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm");


    Button button;

    EditText weightInput;
    EditText ketoneBloodInput;
    EditText ketoneUrineInput;
    EditText bloodPressureInput;
    EditText bloodSugarInput;

    String weight;
    String ketoneBlood;
    String ketoneUrine;
    String bloodPressure;
    String bloodSugar;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        File file = new File(getApplicationContext().getFilesDir(),myBodyRecord);


        //Setting where to get the data from, ie what fields
        weightInput = findViewById(R.id.weight);

        ....................
    }
}
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
    at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:116)
    at com.example.mybodyrecord.MainActivity.<init>(MainActivity.java:22)

The above three lines tells you what is the problem and where it is.上面三行告诉你问题出在哪里。

Problem: The problem is you are using something that is not initialized yet means null .问题:问题是您正在使用尚未初始化的东西,这意味着null In your case getApplicationContext() is responsible for this exception means when you call it gives you a null reference.在您的情况下, getApplicationContext()负责此异常,这意味着当您调用它时,它会为您提供null参考。

Where: com.example.mybodyrecord.MainActivity.<init>(MainActivity.java:22) this line tells you where does your exception occurs.其中: com.example.mybodyrecord.MainActivity.<init>(MainActivity.java:22)这一行告诉您异常发生在哪里。 It clearly says that the exception is in your MainActivity line number 22 .它清楚地表明exception出现在您的MainActivity行号22中。

Cause: Before onCreate getApplicationContext is always null .原因:onCreate getApplicationContext之前总是null

Solution: You should initialize your file inside the onCreate() like the following.解决方案:您应该在onCreate()initialize您的file ,如下所示。

public class MainActivity extends AppCompatActivity {

    String myBodyRecord = "My_Body_Record.txt";
    Date date = new Date();
    SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm");
    File file; // decleare here and initialize inside onCreate.

    Button button;

    EditText weightInput;
    EditText ketoneBloodInput;
    EditText ketoneUrineInput;
    EditText bloodPressureInput;
    EditText bloodSugarInput;

    String weight;
    String ketoneBlood;
    String ketoneUrine;
    String bloodPressure;
    String bloodSugar;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //activity has a context now you can use getApplicationContext or this
        file = new File(this.getFilesDir(),myBodyRecord); // here you should initialize your file

        //Setting where to get the data from, ie what fields
        weightInput = findViewById(R.id.weight);
        ketoneBloodInput = findViewById(R.id.ketoneblood);
        ketoneUrineInput = findViewById(R.id.ketoneurine);
        bloodPressureInput = findViewById(R.id.bp);
        bloodSugarInput = findViewById(R.id.bslvl);

        button = findViewById(R.id.submit);

        // ......
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM