我正在尝试从EditText
转换双重类型,但我似乎并不理解将其写下来的正确位置。
根据我的研究,错误似乎来自
EditText cct = (EditText)findViewById(R.id.curr_credit_text);
在onCreate()
方法之前初始化。但是,如果我在onCreate()
方法中初始化它,则其他方法无法访问已解析的变量,如此
我想在哪里初始化变量,然后可以从其他方法访问它?
我已尝试所有三个箭头作为展示位置,但每次都会出现另一个错误。
这是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)
答案 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());
...
}