将Bundle传递给AsyncTask

时间:2012-04-02 10:42:11

标签: android

我在AsyncTask中遇到捆绑问题。我有两个字符串,我想传递给AsyncTask,我想使用bundle来完成这个任务。

MainActivity中的代码:

Bundle adresses = new Bundle();
adresses.putString("to", textField1.getText().toString());
adresses.putString("from", textField2.getText().toString());

new PriceTask(getApplicationContext()).execute(adresses); 

在我的AsycTask中,我这样做:

protected Integer doInBackground(Bundle... b) {

   Bundle result = b[0];
   String to = result.getString("to");
   String from = result.getString("from");

}

值得一提的是,我的两个字符串包含这样的内容

"Sometext here, and sometext here 1234"

Put我无法检索文本,我的调试器说Bundle包含正确的信息,但我的String不包含正确的信息。当我调试并设置我的字符串所在的断点时,它只有值:

[t, o]

我在这里做错了什么?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您所做错的是您在doInBackground方法中检索数据的方式。方法具有的参数是Array类型。请关注 ... 您在行中Bundle result = b[0];所做的只是获取该数组的第0个元素并将其传递给Bundle引用。

您提供的代码和详细信息不足以提供完美的答案。如果所有给定的代码都在同一个Java类中,则不需要使用Bundle。相反,您可以创建一个String类型的ArrayList来包含您从TextFields获得的值。然后doInBackground还包含一个ArrayList作为方法参数。然后获取所有List项并将“to”和“from”值分开。

如果您坚持使用现有代码,请先尝试找出result变量中的内容。

答案 1 :(得分:1)

在MAin活动中,替换以下行::

Bundle adresses = new Bundle();
adresses.putString("to", textField1.getText().toString());
adresses.putString("from", textField2.getText().toString());

new PriceTask(getApplicationContext()).execute(adresses); 

new PriceTask(getApplicationContext(),textField1.getText().toString(),textField2.getText().toString()).execute(); 

在你的AsycTask中添加构造函数,如下面的::

字符串到; 字符串来自; 上下文上下文;

public YourAsyncTask(Context context,String to,String from){         // TODO自动生成的构造函数存根         this._activity = _activity; this.to = to; this.from = from;     }