我不知道如何解决问题,这是我在为Android设计API时遇到的问题。
API必须包含一个能够从特定URL获取JSON Object
的方法。因此,我决定使用方法AsyncTask
来实现这一目标。
从这个API执行方法后,我需要填充ListView
,但我不知道如何。据我所知,无法将AsyncTask
(来自我的API中的方法)放入其他AsyncTask
。
任何想法,解决方案,建议?
编辑:
换句话说,我想创建一个方法来调用restful服务并获取JSON
。
将执行此方法(从其他包中)以使用结果填充ListView
。
我的AsyncTask
:
protected String doInBackground(HashMap<String,Boolean>... args)
{
JSONArray readings=null;
JSONObject json = getReadingsFromDB(args[0]);
try
{
int i;
readings = json.getJSONArray(TAG_READINGS);
for(i =0; i<readings.length();i++)
{
JSONObject ob = readings.getJSONObject(i);
ReadingH newReading = new ReadingH();
HashMap<String,String> map = new HashMap<String, String>();
String id;
String date;
String humidity;
String temp;
if(!ob.isNull(TAG_TEMPERATURE))
{
temp = ob.getString(TAG_TEMPERATURE);
newReading.setValue(TAG_TEMPERATURE, temp);
map.put(TAG_TEMPERATURE, temp);
}
if(!ob.isNull(TAG_ID))
{
id = ob.getString(TAG_ID);
newReading.setValue(TAG_ID, id);
map.put(TAG_ID, id);
}
if(!ob.isNull(TAG_DATE))
{
date = ob.getString(TAG_DATE);
map.put(TAG_DATE, date);
newReading.setValue(TAG_DATE, date);
}
if(!ob.isNull(TAG_HUMIDITY))
{
humidity= ob.getString(TAG_HUMIDITY);
map.put(TAG_HUMIDITY, humidity);
newReading.setValue(TAG_HUMIDITY, humidity);
}
readingsListH.add(newReading);
readingsList.add(map);
}
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String file_url)
{
// pDialog.dismiss();
a.runOnUiThread(new Runnable()
{
public void run()
{
ListAdapter adapter = new SimpleAdapter(
a,readingsList,
R.layout.reading_item,new String[]{TAG_ID,TAG_DATE,TAG_TEMPERATURE},
new int[]{R.id.ReadingID,R.id.ReadingDate,R.id.ReadingTemperature});
a.setListAdapter(adapter);
}
});
}
doInBackground将在我的新方法中,但来自onPostExecute的代码将在那里执行新方法。
此致