【问题标题】:How to use intents to send a user input data from one activity to another如何使用意图将用户输入数据从一个活动发送到另一个活动
【发布时间】:2014-08-23 14:30:58
【问题描述】:

下面的代码是第三个第四个活动的源代码。第三个活动接收用户输入并对其执行数学运算。然后将原始值和处理后的值都发送到需要显示的第四个活动。我不太熟悉意图的使用。有人可以检查我的代码吗?它不工作。

第三次活动

public class Third extends Activity {

double x=0, val1=0;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.third);

    final EditText et;
    final Button b;

    et = (EditText) findViewById(R.id.editText1);
    b = (Button) findViewById(R.id.button1);

    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Third.this, Fourth.class);
            intent.putExtra("thetext", et.getText().toString());
            startActivity(intent);

            x=Double.parseDouble(et.getText().toString());

            val1=(x*.04);

            Intent in1 = new Intent(Third.this, Fourth.class);
            in1.putExtra("thevalue1",val1);
            startActivity(in1);

        }


  });

}
}

第四个活动:

public class Fourth extends Activity {

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

    TextView tv = (TextView) findViewById(R.id.textView1);
    tv.setText(getIntent().getExtras().getString("thetext"));


    TextView wt1=(TextView) findViewById(R.id.textView12);
    wt1.setText(getIntent().getExtras().getDouble("thevalue1"));
} 

}

【问题讨论】:

  • 你的问题是什么?你有什么?哪里出错了?

标签: java android eclipse android-intent android-activity


【解决方案1】:

您需要将两个附加功能都放在一个Intent 中,并且只调用一次startActivity(...)。更改您的第三个Activity 的代码(在onClick(...) 方法中)如下...

Intent intent = new Intent(Third.this, Fourth.class);
intent.putExtra("thetext", et.getText().toString());
x=Double.parseDouble(et.getText().toString());
val1=(x*.04);
intent.putExtra("thevalue1",val1);
startActivity(intent);

【讨论】:

  • 知道了!第四次活动​​怎么样?如何从包中提取这两个值?
  • @user3211607 :正如您在发布的代码中显示的那样。它应该可以工作。
  • 显示错误:TextView 类型中的方法 setText(CharSequence) 不适用于参数(双精度)
  • 那是因为您试图将TextView 的文本设置为Double。只需与您在第三 Activity 中所做的相反,然后使用 String.valueOf(...) 转换回 String
  • 先生,还有一个疑问.. 我可以像上面显示的那样将多个值添加到同一个包中吗?有限制吗?
【解决方案2】:

您正在开始 2 个不同的活动。我认为您想要的是设置多个意图附加内容,然后开始活动:

@Override
public void onClick(View v) {
    Intent intent = new Intent(Third.this, Fourth.class);

    intent.putExtra("thetext", et.getText().toString());

    x=Double.parseDouble(et.getText().toString());
    val1=(x*.04);
    intent.putExtra("thevalue1",val1);

    startActivity(intent);
}

在您的示例中,您开始 1 项活动只有 text 和另一个只有 double。然而,在这两项活动中,您都试图获得两个的价值观。

另请注意,对于最终变量,您需要在这样声明时设置它们:

final EditText et = (EditText) findViewById(R.id.editText1);
final Button b = (Button) findViewById(R.id.button1);

【讨论】:

    【解决方案3】:

    在第四个活动中这样做

    TextView tv = (TextView) findViewById(R.id.textView1);
        tv.setText(getIntent().getStringExtra("thetext"));
    
    
        TextView wt1=(TextView) findViewById(R.id.textView12);
        wt1.setText(getIntent().getDoubleExtra("thevalue1"));
    

    getExtras() 方法用于捆绑,您存储在意图中的第三个活动中

    in1.putExtra("thevalue1",val1);
    

    【讨论】:

    • 这不会解决任何问题。 Intent 的附加部分包含在 Bundle 中。调用getStringExtra(...)getDoubleExtra(...) 只是调用getExtras().getString(...)getExtras().getDouble(...) 的便捷方法。
    • 当我尝试我得到一个错误: Intent 类型中的方法 getDoubleExtra(String, double) 不适用于参数 (String)
    • 试试这个wt1.setText(String.valueOf(getIntent().getDoubleExtra("thevalue1")));
    猜你喜欢
    • 2012-11-19
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 2017-01-07
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多