在我的 Android 项目中,我试图将提交的表单数据的 Map 从我的主 Activity 类发送到扩展 asyncTask 的第二个类。
在我的主要 Activity 中,我有以下代码 fragment :
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);
这会设置我的数据映射,成功测试第一个元素并将表单数据发送到我的类,该类负责在单独的线程上处理该数据。
但是,在我的异步类中,使用以下代码段:
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;
}
}
我的第二个日志调用试图提取数组映射的名称元素,但我的“数据”对象未被识别为我传入的映射。
最佳答案
doInBackground()
方法接受一个 varargs范围。这意味着一次可以传入不止一种类型。
在这种情况下,可能传入了不止一张 map ,在这种情况下,实际上也只有一张 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;
}
关于java - 读取数据的数组映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10870413/