1

在我的 Android 项目中,我试图将提交的表单数据映射从我的主 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);

这设置了我的数据映射,成功测试了第一个元素并将表单数据发送到我的班级,负责在单独的线程上处理该数据。

但是,在我的异步类中,使用以下代码段:

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;
    }

}

我的第二个日志调用试图提取数组映射的名称元素,但我的“数据”对象未被识别为我传入的映射。

4

1 回答 1

1

doInBackground()方法采用可变参数。这意味着可以一次传入多个类型。

在这种情况下,可能传入了多个映射,在这种情况下,实际上只传入了一个 IS。(您知道这一点是因为您是通过AsyncTask的 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;
}
于 2012-06-03T12:50:17.683 回答