我在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]
我在这里做错了什么?提前谢谢。
答案 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; }