Android 尝试调用虚拟方法';double java.lang.double.doubleValue()';关于空对象引用
我试着对bundle进行加法,但得到了 java.lang.NullPointerException:尝试调用虚拟方法 空对象引用上的“double java.lang.double.doubleValue()” 位于com.example.teopeishen.test2.First$1.onClick(First.java:23)。什么 这意味着什么?任何人都知道这件事。它说问题出在第23行 即bundle.putdoull(“writeMark3”,writeMark3)Android 尝试调用虚拟方法';double java.lang.double.doubleValue()';关于空对象引用,android,nullpointerexception,Android,Nullpointerexception,我试着对bundle进行加法,但得到了 java.lang.NullPointerException:尝试调用虚拟方法 空对象引用上的“double java.lang.double.doubleValue()” 位于com.example.teopeishen.test2.First$1.onClick(First.java:23)。什么 这意味着什么?任何人都知道这件事。它说问题出在第23行 即bundle.putdoull(“writeMark3”,writeMark3) writeMar
writeMark3为空,但这不是最大的问题。事实上,你有很多
提供一个复杂的答案意味着向你解释编程基础知识,因此这可能不是一个开始学习编程技能的好地方。像这样改变你的第一堂课活动
package com.example.teopeishen.test2;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class First extends AppCompatActivity {
public Button but;
public void change(){
but = (Button) findViewById(R.id.buttonGenerate);
View.OnClickListener click = new View.OnClickListener(){
@Override
public void onClick (View v){
Intent calc = new Intent (First.this,Second.class);
startActivity(calc);
Bundle bundle = new Bundle();
bundle.putString("testName",testName.getText().toString());
bundle.putDouble("writeMark3",writeMark3);
bundle.putDouble("speakMark3",speakMark3);
bundle.putDouble("listenMark3",listenMark3);
bundle.putDouble("finalMark3",finalMark3);
Intent intent = new Intent(First.this,Second.class);
intent.putExtras(bundle);
startActivity(intent);
}
};
but.setOnClickListener(click);
}
private EditText testName;
private EditText writeMark;
private EditText speakMark;
private EditText listenMark;
private Double writeMark2;
private Double speakMark2;
private Double listenMark2;
private Double writeMark3;
private Double speakMark3;
private Double listenMark3;
private Double finalMark3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
testName = (EditText) findViewById(R.id.editTextName);
writeMark = (EditText) findViewById(R.id.editTextWrite);
speakMark = (EditText) findViewById(R.id.editTextSpeak);
listenMark = (EditText) findViewById(R.id.editTextListen);
try {
writeMark2 = Double.valueOf(writeMark.getText().toString());
speakMark2 = Double.valueOf(speakMark.getText().toString());
listenMark2 = Double.valueOf(listenMark.getText().toString());
writeMark3 = writeMark2 / 100 * 50;
speakMark3 = speakMark2 / 100 * 30;
listenMark3 = listenMark2 / 100 * 20;
finalMark3 = writeMark3 + speakMark3 + listenMark3;
} catch (Exception e) {
finalMark3 = 0.0;
}
change();
}
}
所作的改动包括:
1.您最初是在计算editText值,而不是在单击按钮时,因此这些值没有得到更新
2.未使用Bundle值,因为您在onclick函数内两次调用intent。在初始化变量后使用change()方法。我已经尝试修改代码。我不写writeMark3=writeMark2/100*50,而是写writeMark3=newdobule(writeMark2/100*50)。但它也不起作用。这是因为抛出了一个异常,并且代码没有执行。。。writeMark.getText()为null,调用writeMark.getText().toString()会引发异常,执行catch块请更具体地说明如何修复它。好的,我尝试向catch()添加代码{writeMark3=0;speakMark3=0;finalMark3=0,listenMark3=0;}然后应用程序没有崩溃,但重点是它出现异常的原因。我确实在editText框中键入了一些值。在代码中,您可以从onCreate中的editText获取文本。这意味着当活动开始时,你只得到一次值,然后你忽略编辑文本中的任何输入,检查我的答案,这正是我已经告诉你的。您必须在OnClickListener中获取EditText值。。。阅读一些关于android基础知识的教程。很抱歉,我不知道如何创建一个新的回复答案。所以我编辑你的答案。希望你不要介意。这个应用程序仍然不工作。我尝试了你的代码,但计算值仍然会出现异常,这已经设置好了,我不知道为什么。我终于成功了。我只是把getValues方法放在@override单击按钮中。然后它工作了。我想这个值只有在单击按钮时才会得到。@TeoPeiShen.这就是我在代码中所做的。.我说过你只需要这样做。.正确地查看我的代码。耶,我的错误。无论如何,非常感谢。你是职业选手。
public class First extends AppCompatActivity {
private EditText testName;
private EditText writeMark;
private EditText speakMark;
private EditText listenMark;
private Double writeMark2;
private Double speakMark2;
private Double listenMark2;
private Double writeMark3;
private Double speakMark3;
private Double listenMark3;
private Double finalMark3;
public Button but;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
testName = (EditText) findViewById(R.id.editTextName);
writeMark = (EditText) findViewById(R.id.editTextWrite);
speakMark = (EditText) findViewById(R.id.editTextSpeak);
listenMark = (EditText) findViewById(R.id.editTextListen);
but = (Button) findViewById(R.id.buttonGenerate);
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getValues();
Bundle bundle = new Bundle();
bundle.putString("testName", testName.getText().toString());
bundle.putDouble("writeMark3", writeMark3);
bundle.putDouble("speakMark3", speakMark3);
bundle.putDouble("listenMark3", listenMark3);
bundle.putDouble("finalMark3", finalMark3);
Intent intent = new Intent(First.this, Second.class);
intent.putExtras(bundle);
startActivity(intent);
}
});
}
public void getValues() {
try {
writeMark2 = Double.valueOf(writeMark.getText().toString());
speakMark2 = Double.valueOf(speakMark.getText().toString());
listenMark2 = Double.valueOf(listenMark.getText().toString());
writeMark3 = writeMark2 / 100 * 50;
speakMark3 = speakMark2 / 100 * 30;
listenMark3 = listenMark2 / 100 * 20;
finalMark3 = writeMark3 + speakMark3 + listenMark3;
} catch (Exception e) {
finalMark3 = 0.0;
}
}
}