【问题标题】:HashMap get(Key) function not working in Android AsyncTaskHashMap get(Key) 函数在 Android AsyncTask 中不起作用
【发布时间】:2015-04-19 03:06:24
【问题描述】:

我试图从HashMap 中获取一个值,该值作为参数传递给AsyncTaskget(Key) 方法无法解析;我的 IDE 状态

“无法解析方法'get(java.lang.String)'”。

这里是有问题的代码:

public class AmayalockAsyncTask extends AsyncTask<HashMap<String, String>, Void, String> {

    protected String doInBackground(HashMap... params) {

        String ACTION = params.get("action");

        return " ";
     }
}

我无法弄清楚我错过了什么。它的行为就像“params”是一个字符串。

【问题讨论】:

    标签: java android android-asynctask hashmap


    【解决方案1】:

    实际上你首先需要从数组参数中检索 HashMap 对象,如下所示:

    protected String doInBackground(HashMap... params) {
        HashMap mapYouNeed = params[0];
        String ACTION = mapYouNeed.get("action");
        return ACTION;
    }
    

    首先检索映射的原因是因为 AsyncTask 的输入是一个数组。如果只传入一个 HashMap,则需要检索索引 0 处的元素。HashMap... paramas 表示 params 是一个 HashMap 元素数组。

    【讨论】:

    • 谢谢@Sunil,我认为这行得通。我需要做的唯一额外的事情是对map.get("action") 进行类型转换,否则它会一直说“不兼容的类型:需要 java.lang.String,找到 java.lang.object”。
    • 嗯.. 我认为这可能是因为您创建了一个 HashMap 而没有使用泛型可能(?)
    • 嗯,不确定。我尝试了doInBackground(HashMap&lt;String, String&gt;... params),但map.get("action") 仍然需要将其类型转换为字符串。
    • 当你创建 Asynctask 并传入一个 HashMap 时,你在那里传递的泛型参数是什么。例如,当您执行 new AmayalockAsyncTask().execute(map); 时,您传入的地图类型是什么?你是创建了这样的 HashMap 地图还是只是说 HashMap 地图?
    • 我把 HashMap: HashMap&lt;String, String&gt; map = new HashMap&lt;&gt;(); 然后 AmayalockAsyncTask registerUser = new AmayalockAsyncTask(); regusterUser.execute(map);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多