0

私は Android アプリケーションを開発していますが、数式の計算で null 値を処理する方法がわかりません。null 値をスキップしようとしているコードを次に示しますが、これは機能しません。

アップデート

実際に私はこれをやろうとしています

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

4 に答える 4

1

そこにあるはずのこの一点は完全な解決策ではありません......

molcost が 2 つあるため、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;
于 2012-06-20T05:45:17.357 に答える
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();
            }

        });
    }
于 2012-06-20T05:47:07.200 に答える
0

これを試してみてください。

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

うまくいかない場合は、「/data/anr/traces.txt」ファイルをダウンロードしてログを確認してください。何かヒントになるかもしれません。可能であれば、問題の特定に役立つログをここに貼り付けてください。

于 2012-06-20T06:59:18.640 に答える
0

コード内で molcost 変数を初期化する必要があります。

于 2012-06-20T05:55:52.733 に答える