在我的Android项目中,我试图将提交的表单数据Map从我的主Activity类发送到扩展asyncTask的第二个类。
在我的主要活动中,我有以下代码片段:
Map<String, String> formData = new HashMap<String, String>();
formData.put("name", formName.getText().toString());
formData.put("test", "TESTING");
//formData.get("name"); - this test works
Connection connection = new Connection();
connection.execute(formData);
设置我的数据Map,成功测试第一个元素并将表单数据发送给负责在单独线程上处理该数据的类。
但是,在我的异步类中,使用以下代码段:
public class Connection extends AsyncTask<Map, Void, Void> {
@Override
protected Void doInBackground(Map... data) {
// TODO Auto-generated method stub
Log.i("TEST", "NEW THREAD FIRING !!!");
Log.d("DATA", data.get("name"));
return null;
}
}
我的第二次日志调用是尝试提取数组映射的name元素,但我的“data”对象无法识别为我传入的Map。
答案 0 :(得分:1)
doInBackground()
方法带有varargs参数。这意味着可以同时传入多个类型。
在这种情况下,可能会传入多个映射,在这种情况下,实际只传入一个IS。(您知道这是因为您通过AsyncTask
's execute方法启动了调用)。注意方法签名中的...
?这意味着您可以传入多个Map
个对象。
Connection connection = new Connection();
connection.execute(formData1, formData2, formData3);
您可以像访问任何array
对象一样访问值,也就是使用索引器。
我相信如果你将代码更改为这样,它应该可以工作:
@Override
protected Void doInBackground(Map... data) {
// TODO Auto-generated method stub
Log.i("TEST", "NEW THREAD FIRING !!!");
Map myMap = data[0];
Log.d("DATA", myMap.get("name"));
return null;
}