我正在将请求发送到提供JSON响应的第三方Web服务器。该响应包含有关用户的信息。每个用户都有一个“ refid”以及有关该用户的其他一些元素。我目前正在遍历结果,并将每个用户存储到一个Hashmap中,然后将该映射添加到(ArrayList Hashmap String,String)中,然后使用此数据填充listview。现在我要做的是,当用户按下列表视图上的按钮时,它将所有refid从Arraylist中拉出,并通过AsyncTask发送到我的服务器以查找与该refid匹配的对象。
我的问题是,当refid的数量可以变化时,应该如何将refid发送给asyntask?我可以获取值和键并创建可以发送到服务器的JSONObject吗?例如{refid = 123,refid = 345,refid = 678}。 asynctask的参数是什么?
任何帮助,将不胜感激。
最佳答案
您可以执行以下操作:
listView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
{
Hashmap<String , String> map = yourArrayList.get(position);
MyAsyncTask task = new MyAsyncTask(map);
task.execute()
}
});
在这里,我根据单击的位置从您的ArrayList获取哈希图;
然后我将hashMap与构造函数一起传递给AsyncTask,然后像下面这样执行Asynctask:
public class MyAsyncTask extends AsyncTask <Void,Void,Void> {
private Hashmap<String , String> map ;
public MyAsyncTask (HashMap<String,String> m ){
this.map = m ;
}
…
}
在您的asynctask中,您可以将HashMap转换为JSONObject:
public JSONObject(java.util.Map map)
JSONObject构造函数将Map作为参数,并从Map构造JSONObject,如下所示:
JSONObject obj=new JSONObject(yourmap);
并请给我反馈。
希望能有所帮助。