Java Android,AsyncTask内的AsyncTask doInBackground
我不知道如何解决这个问题,这是我在为Android设计API时遇到的。 API必须包含能够从特定URL获取Java Android,AsyncTask内的AsyncTask doInBackground,java,android,json,android-asynctask,Java,Android,Json,Android Asynctask,我不知道如何解决这个问题,这是我在为Android设计API时遇到的。 API必须包含能够从特定URL获取JSON对象的方法。因此,我决定使用AsyncTask方法来实现这一点。 从这个API执行方法之后,我需要填充一个列表视图,但我不知道如何填充。据我所知,无法将AsyncTask(从API中的方法)放入其他AsyncTask。 有什么想法、解决方案、建议吗 编辑: 换句话说,我想创建一个调用restful服务并获取JSON的方法。 将执行此方法(从其他包中)以使用结果填充ListView 我
JSON对象的方法。因此,我决定使用AsyncTask
方法来实现这一点。
从这个API执行方法之后,我需要填充一个列表视图
,但我不知道如何填充。据我所知,无法将AsyncTask
(从API中的方法)放入其他AsyncTask
。
有什么想法、解决方案、建议吗
编辑:
换句话说,我想创建一个调用restful服务并获取JSON
的方法。
将执行此方法(从其他包中)以使用结果填充ListView
我的异步任务
:
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(HashMap…args)
{
JSONArray读数=空;
JSONObject json=getReadingsFromDB(args[0]);
尝试
{
int i;
readings=json.getJSONArray(标记读数);
对于(i=0;iasynctask本身就是一个引用,您可以在任何地方实现它,并在所需的位置(方法)内使用它(启动)你需要阅读一些关于AsyncTask
的文档,并搜索类似的问题,因为这里有几十个问题的答案。不,你不需要使用第二个AsyncTask。如果你想在不深入Android的情况下构建一个快速restful客户端,你应该使用一个库,比如。我读过类似的问题,但是有一点不同。其他人可以修改onPostExecute()方法,我们可以在其中放置代码来管理ListView-例如,填充它,我不填充。方法getAll()其中aSyncTask包含在我的API中。我是否可以使用方法get from aSyncTask等待结果,然后在RunUnuithRead中使用结果填充ListView?为什么不能使用onPostExecute
?如果您的aSyncTask
负责下载和解析JSON数据,您是否考虑过让API的用户继承f从AsyncTask和overrideonPostExecute()
?您是否考虑过让API的客户端提供回调的选项,在回调完成后,onPostExecute()
将调用该回调(该回调将接收从json获取的数据)?