【问题标题】:Cannot get Data from the intent - Android无法从意图中获取数据 - Android
【发布时间】:2013-09-03 19:07:04
【问题描述】:

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

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();       
}

}

【问题讨论】:

  • 第一条评论:您是否使用 Eclipse 调试器单步调试您的代码以确保其行为符合您的预期?第二条评论:从onCreate() 调用finish() 似乎很奇怪。如果这是您用来了解 Intent 如何工作的示例,我建议您在第二个 Activity 中添加一个按钮,单击该按钮时会调用 setResult()finish()
  • 谢谢,但我已经按照 CodeMagic 所说的进行了尝试。实际上我明白我们应该在 onDestry() 期间调用 finsih()。只是想快点做。如果我错了,请让我理解。

标签: android android-intent


【解决方案1】:

donActivityResult() 中的Intent 变量,因此请尝试更改

    @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

返回启动此活动的意图。

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

【讨论】:

  • 感谢您对 Code Magic 的帮助。实际上它按你说的那样工作。我可以理解 d 是一个意图参数。但是 getIntent() 有什么问题?它不也返回 Intent 吗? Eclipse 也没有显示任何错误。
  • 我已经编辑了一个更好的解释。不客气,您可以通过单击答案旁边的复选标记来感谢我,以便其他人可以更轻松地找到它;)
  • 是的,我明白了。但我只是想让它变得简单。我什至可以使用一个线程(如果它的计算量很大),或者在同一个活动中。但我只想发送和检索数据。我不想打扰我的第二个活动。
  • 好的,听起来你明白了:)
  • 谢谢你的解释我现在明白了。它只是调用了启动我的第一个活动的 Intent,而不是来自设置结果的 Intent。
猜你喜欢
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
相关资源
最近更新 更多