更改类后的NullPointerException(以前的代码工作)

时间:2012-06-27 09:34:52

标签: java android

我在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;
}

}

4 个答案:

答案 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);