RuntimeException:Unabel实例化活动ComponentInfo和NullPointerException

时间:2015-11-30 06:38:57

标签: java android nullpointerexception

我正在尝试从EditText转换双重类型,但我似乎并不理解将其写下来的正确位置。

根据我的研究,错误似乎来自

EditText cct = (EditText)findViewById(R.id.curr_credit_text);

onCreate()方法之前初始化。但是,如果我在onCreate()方法中初始化它,则其他方法无法访问已解析的变量,如此

enter image description here

我想在哪里初始化变量,然后可以从其他方法访问它?

enter image description here

我已尝试所有三个箭头作为展示位置,但每次都会出现另一个错误。

  

这是logcat

FATAL EXCEPTION: main
                                                                      Process: com.example.user.testapp, PID: 27472
                                                                      java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.user.testapp/com.example.user.testapp.RevGPAActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
                                                                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2227)
                                                                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2376)
                                                                          at android.app.ActivityThread.access$800(ActivityThread.java:147)
                                                                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
                                                                          at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                          at android.os.Looper.loop(Looper.java:135)
                                                                          at android.app.ActivityThread.main(ActivityThread.java:5253)
                                                                          at java.lang.reflect.Method.invoke(Native Method)
                                                                          at java.lang.reflect.Method.invoke(Method.java:372)
                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
                                                                       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
                                                                          at android.app.Activity.findViewById(Activity.java:2113)
                                                                          at com.example.user.testapp.RevGPAActivity.<init>(RevGPAActivity.java:20)
                                                                          at java.lang.reflect.Constructor.newInstance(Native Method)
                                                                          at java.lang.Class.newInstance(Class.java:1572)
                                                                          at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
                                                                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2217)
                                                                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2376) 
                                                                          at android.app.ActivityThread.access$800(ActivityThread.java:147) 
                                                                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281) 
                                                                          at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                          at android.os.Looper.loop(Looper.java:135) 
                                                                          at android.app.ActivityThread.main(ActivityThread.java:5253) 
                                                                          at java.lang.reflect.Method.invoke(Native Method) 
                                                                          at java.lang.reflect.Method.invoke(Method.java:372)

5 个答案:

答案 0 :(得分:2)

像这样进行初始化

EditText edt1;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edt1=(EditText)findviewById(R.id.edt_username);
}

答案 1 :(得分:0)

您必须声明您的变量外部 onCreate()方法,初始化

例如:

 private EditText cct;


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

     cct = (EditText) findViwByid(R.id.curr_creadit_text);
     ...
 }

答案 2 :(得分:0)

将你的变量放在onCreate()之前,就像这样

private double CURRENT_CREDIT;
private double FUTURE_CREDIT;

等......

这样做你将声明全局变量,它可以在整个类中被访问。

答案 3 :(得分:0)

为每个EditText执行类似的操作:

public class RevGPAActivity extends Activity {

    private EditText cct;
    ....

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rev_gpa);

        cct = (EditText) findViewById(R.id.current_credit_text);
        ....
    }
}

您也可以通过onCreate()访问它。

答案 4 :(得分:0)

您必须在onCreate中初始化变量并在计算GradPoint()时获取这些值,您可以添加按钮并在按下按钮时调用GradPoint()。因为如果你在onCreate中调用它们,那么这些函数会被立即调用,你可以在输入值后调用它们,对吧?如果你在没有输入值的情况下调用它们,你将得到NumberFormatException因为你试图解析一个空字符串,所以你在使用Double.parseDouble()时也要小心。我在下面写了一个示例代码结构,以显示我在这里想说的内容。希望它有所帮助。

EditText edt1;
Button sumbit;
private double CURRENT_CREDIT;
private double FUTURE_CREDIT;
...

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    edt1=(EditText)findviewById(R.id.edt_username);
    submit=(EditText)findviewById(R.id.submit);

    ...

    submit.setOnClickListener(new Button.OnClickListener() {  
    public void onClick(View v)
        {
             //Check if all the required values are not empty
            if(!edt1.getText().toString().isEmpty() && ...)
                calcGradPoint();
        }
     });
}

void calcGradPoint(){
    CURRENT_CREDIT = Double.parseDouble(ed1.getText().toString());
    ...

}