java - 读取数据的数组映射

标签 java android variadic-functions array-map

在我的 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/

相关文章:

android - 如何实现类似于 Google map 和 Twitter 的滑出式菜单 Pane ?

C - 从 va_arg 中检索 int 数组的值

android - Kotlin (Android) - 为非可变函数传播一个数组/列表

c++ - 重载函数作为可变参数模板函数的参数

Java机器人验证鼠标点击

java - 在 Java 中减去两个日期

android - 未创建sqlite数据库

java - 当构造函数在牙签中有参数时通过工厂注入(inject)

java - 如何将符合 RFC 5322 标准的电子邮件地址解析并规范化为其组件 ("John Smith"、john.smith+tag、(评论)、域)?

java.lang.ClassNotFoundException : com. google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier$Builder