2012-06-03 42 views
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; 
    } 

} 

我的第二个日志呼叫尝试提取阵图的名称元素,但我的“数据”的对象是没有公认的我通过的地图

有人可以帮忙吗?

+0

你“'(地图......数据)'”作为方法的参数,即“'数组Map'“分:秒。试试'data [0] .get(“name”)'。 – Jens

回答

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

非常感谢 – sisko