Android,AsyncTask在AsyncTask doInBackground中

时间:2014-01-10 20:21:20

标签: java android json android-asynctask

我不知道如何解决问题,这是我在为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的代码将在那里执行新方法。

此致

0 个答案:

没有答案