无法从意图中获取数据 - Android

时间:2013-09-03 19:07:05

标签: android android-intent

我是初学者,我正在尝试制作一个Intent计算器,意味着我通过Intent extras添加输入并开始计算输入的新活动。最后,我试图使用onActivityResult()来接收结果。问题是我已将结果设置为文本视图,文本视图将其检测为double值(从默认文本显示0.0)。我无法理解问题所在,因为Logcat中没有错误。以下是我的代码。当我按下按钮时,它只显示0.0。无论我点击多少次。此外,我正在练习意图,所以只尝试了基本的。请帮助我。

public class InputActivity extends Activity {


final int CALCULATION_COMPLETE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_input);

    final EditText num1 = (EditText) findViewById(R.id.num1_edit);
    final EditText num2 = (EditText) findViewById(R.id.num2_edit);

    Button add = (Button) findViewById(R.id.resultButton);

    add.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
        String  firstNum =  num1.getText().toString();
        String secondNum = num2.getText().toString();

        Intent resultIntent = new Intent(InputActivity.this,ResultActivity.class);
        resultIntent.putExtra("first", firstNum);
        resultIntent.putExtra("second", secondNum);
        startActivityForResult(resultIntent, CALCULATION_COMPLETE);
        }
    });     
}

@Override
protected void onActivityResult(int reqCode, int resCode, Intent d){
    super.onActivityResult(reqCode, resCode, d);
    TextView result = (TextView) findViewById(R.id.result);
    if(reqCode == CALCULATION_COMPLETE && resCode == RESULT_OK){

        Intent resultData = getIntent();
        Double addResult = resultData.getDoubleExtra("result", 0);

        String resultStr = addResult.toString();

        result.setText(resultStr);
    }
}

}

public class ResultActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    Intent calcIntent = getIntent();
    String firstStr = calcIntent.getStringExtra("first");
    String secondStr = calcIntent.getStringExtra("second");

    Double firstNum = Double.parseDouble(firstStr);
    Double secondNum = Double.parseDouble(secondStr);

    Double addResult = firstNum + secondNum;

    Intent result = new Intent();
    result.putExtra("result", addResult);

    setResult(RESULT_OK, result );
    finish();       
}

}

1 个答案:

答案 0 :(得分:2)

dIntent中的onActivityResult()变量,因此请尝试更改

    @Override
protected void onActivityResult(int reqCode, int resCode, Intent d){
    super.onActivityResult(reqCode, resCode, d);
    TextView result = (TextView) findViewById(R.id.result);
    if(reqCode == CALCULATION_COMPLETE && resCode == RESULT_OK){

        Intent resultData = getIntent();

        Intent calcIntent = getIntent();

@Override
protected void onActivityResult(int reqCode, int resCode, Intent d){
    super.onActivityResult(reqCode, resCode, d);
    TextView result = (TextView) findViewById(R.id.result);
    if(reqCode == CALCULATION_COMPLETE && resCode == RESULT_OK){

        Intent resultData = d;  //This line here

如果这不能解决你的问题,那么请更清楚一下是什么/没有发生。

另外,我同意Monad的评论。虽然它不应该导致问题,但在onCreate()上执行所有这些操作似乎有点奇怪,而使用Button或某些用户输入可能会有所改善。否则,确实不需要单独的Activity,但您可以使用函数在第一个Activity中进行计算。

修改

From the Docs

  

返回开始此活动的意图。

所以这不会返回Intent中第二个Activity传递的setResult()。它将返回Intent,该Activity可能会在onCreate()中使用Activity。在这种情况下,Activity未启动,但在第二个setResult()完成并调用{{1}}时返回到堆栈顶部。