将空值替换为0或Android中的任何其他值

时间:2012-06-20 05:43:22

标签: android null

我正在开发一个Android应用程序,并且不知道在公式计算中处理空值的热点。这是我的代码,通过它我试图跳过空值,但这不起作用。

更新

其实我正在尝试这样做

package ecc.ecc.pkg;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import ecc.ecc.pkg.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class ECCActivity extends Activity {
    Button    btncalc;
    EditText  molcostper;
    TextView  costper;
    double    molcost = 0;
    double    cstperusd = 0;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initcontrols();
    }
    public void initcontrols()
    {
        molcostper=(EditText)findViewById(R.id.molcostper);
            costper=(TextView)findViewById(R.id.costper);  

        btncalc=(Button)findViewById(R.id.btnCalc);
        btncalc.setOnClickListener(new Button.OnClickListener(){
            public void onClick(View v)
            {
                calculate();
            }

        });
    }
    public void calculate()
    {
        NumberFormat formatter = new DecimalFormat("#,###,###,###.##");


        molcost=Double.parseDouble(molcostper.getText().toString());


        cstperusd = replaceIfNull(molcost,8500)*94

        costper.setText(formatter.format(cstperusd));
    }
 public static <T> T replaceIfNull(T objectToCheck, T defaultValue) {
          return objectToCheck==null ? defaultValue : objectToCheck;
        }
}

这种方法产生错误请任何人帮忙处理这个

4 个答案:

答案 0 :(得分:1)

这一点应该没有完整的解决方案......

molcost的范围应该更多,因为有两个molcost one local to if other is in else with greater scope ......

double molcost =0;
if (molcostper != null)
        {   
        molcost=Double.parseDouble(molcostper.getText().toString());
        }
        else
        {
        molcost=8500;
            }
result=molcost*10;

答案 1 :(得分:1)

将您的代码更改为:

double molcost =0;
EditText molcostperss  = (EditText) findViewById(R.id.molcostper);
String change  = molcostperss.getText().toString();
if (change.trim().equals("") && change!=null ) {
 molcost=Double.parseDouble(change);
}
else
{
molcost=8500;

}
result=molcost*10;

编辑:通过将costper初始化为

来更新您的initcontrols()方法
 public void initcontrols()
    {
        molcostper=(EditText)findViewById(R.id.molcostper);
        costper=(TextView)findViewById(R.id.costper);
        btncalc=(Button)findViewById(R.id.btnCalc);
        btncalc.setOnClickListener(new Button.OnClickListener(){
            public void onClick(View v)
            {
                calculate();
            }

        });
    }

答案 2 :(得分:0)

您需要在代码中初始化molcost变量。

答案 3 :(得分:0)

试试这个。

if (molcostper != null && !molcostper.getText().toString().isEmpty() )
{   
    molcost=Double.parseDouble(molcostper.getText().toString());
}
else
{
    molcost=8500;
}

如果不起作用,请尝试下载'/data/anr/traces.txt'文件并检查日志。它可能会为您提供一些提示。如果可能,请在此处粘贴日志,以帮助我们确定问题。