我在Java中使用Android的基本计算器。我的计算器工作,但我在一个类中有所有代码。然后我想让代码更具可读性,我创建了另一个Calculation类,并将计算代码放在那里。现在由于某种原因,我的应用程序崩溃了。 LogCat说:NullPointerException。 (我的应用程序启动正常,然后当我选择所需的货币进行转换时,当我点击ImageButton(转换)然后应用程序崩溃)。这是我的代码:
CroToEu课程:
package com.eu.calculator;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
public class CroToEur extends Activity {
TextView resultView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.cro_to_eur);
final ImageButton convert = (ImageButton) findViewById(R.id.converButton);
convertButton(convert);
}
private void convertButton(final ImageButton convert) {
resultView = (TextView) findViewById(R.id.resultView);
convert.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Calculate now = new Calculate();
now.croToEu();
if(event.getAction() == MotionEvent.ACTION_DOWN) {
convert.setImageResource(R.drawable.convert_button_ontouch);
checkForEmptyEntry();
} else if (event.getAction() == MotionEvent.ACTION_UP) {
convert.setImageResource(R.drawable.convert_button);
}
return false;
}
private void checkForEmptyEntry() {
if(Calculate.HRKfield.getText() == null || "".equals(Calculate.HRKfield.getText().toString())) {
resultView.setText("You left empty field");
} else {
resultView.setText(Calculate.HRKfield.getText()+" HRK = "+Calculate.fixDecimal+" EUR");
}
}
});
}
}
我的计算课:
package com.eu.calculator;
import java.math.BigDecimal;
import android.app.Activity;
import android.widget.EditText;
public class Calculate extends Activity {
public static EditText HRKfield; //S tem dobimo vrednost iz polja edittext
public static double EUR = 0.133;//drži vrednost
public static Double HRK; // Možnost uporabe double za parsing
public static double result; // rezultat
public static BigDecimal fixDecimal; // rezultat pretvori na decimalko
public BigDecimal croToEu() {
HRKfield = (EditText) findViewById(R.id.enterField);
try {
HRK = Double.parseDouble(HRKfield.getText().toString()); //tukaj dobimo čisto številko, ki jo uporabnik vnese v polje
result = HRK * EUR;
fixDecimal = new BigDecimal(result);
fixDecimal = fixDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
} catch (NumberFormatException e) {
}
return fixDecimal;
}
}
答案 0 :(得分:1)
不要使用Activity扩展Calculate类。删除扩展计算类
中的活动答案 1 :(得分:0)
if(Calculate.HRKfield.getText() == null || "
获取其他活动的观点是错误的.........
你在CroToEur并且你正在进行计算活动的HRKfield将为空
pass the data from CroToEur activity to Calculate activity using intent
和s et that in HRKfield in onCreate of CroToEur
答案 2 :(得分:0)
您错过了onCreate()
方法,甚至错过了setContentView
中的Calculate.class
,因此无法找到您的编辑文字HRK字段,因此它正在抛出NullpointerException
答案 3 :(得分:0)
如果你试图创建一个帮助类,那么你的计算就不会在你的Calculate类上扩展Activity。而是让你的croToEu方法返回一个变量并从另一个类中调用它,如下所示。
Calculate now = new Calculate();
BigDecimal val = now.croToEu();
Id实际上有如下的caluclate类
public abstract class Calculate {
public static final double EUR = 0.133;//drži vrednost
public static BigDecimal croToEu(double hrkValue) {
BigDecimal fixDecimal = new BigDecimal(hrkValue * EUR);
fixDecimal = fixDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
return fixDecimal;
}
}
然后在您的主要活动类中调用
BigDecimal val = Calculate.croToEu(hrkValue);