1

以下の非同期タスクを検討してください。

protected class FetchArticlesAsyncTask extends AsyncTask<Category, Integer, HashMap<String, Object>> 
{
    private final String TAG = FetchArticlesAsyncTask.class.getSimpleName();
    private HashMap<String, Object> data;
    Bundle bundle = new Bundle();

    protected HashMap<String, Object> doInBackground(Category... categories) 
    {
        HashMap<String, Object> result = new HashMap<String, Object>();

        Articles articles = ... // Get sth from HTTP
        result.put("articles", articles);
        Log.d(TAG, "result = " + result); // Print out sth which is OK

        return result;
    }

    protected void onPostExecute(HashMap<String, Object> result) 
    {
        notifyAsyncTask(FetchArticlesAsyncTask.class, result, this.data);                
    }


..

そして、私の呼び出し元では、私は持っています

protected void notifyFetchArticlesAsyncTask(Class<?> c, Object result, Object input)
{
    HashMap<String, Object> data = (HashMap<String, Object>) result;
    Log.d(TAG, "result = " + result); // result is SOMETIMES empty map? WHY
}

問題は、 で空のマップが表示されるnotifyFetchArticlesAsyncTask場合があることですが、結果は で正常に印刷できます doInBackground

なぜ時々うまくいかないのですか?

4

1 に答える 1

0

このようなことを試しましたか

protected Object doInBackground(Category... categories) 
{
    Articles articles = ... // Get sth from HTTP
    return articles;
}
protected void onPostExecute(Object articles) 
{
     HashMap<String, Object> result = new HashMap<String, Object>();
     result.put("articles", articles);
     Log.d(TAG, "result = " + result); // Print out sth which is OK

    notifyAsyncTask(FetchArticlesAsyncTask.class, result, this.data);                
}
于 2013-11-03T19:07:00.393 に答える