如何在android中实例化多个AsyncTask?

How to instantiate more than one AsyncTask in android?

两天来我一直对将 AsyncTask 放入 SwipeRefreshLayout 感到沮丧。我已经阅读了 SwipeRefreshLayout 和 Async documnetation,但我不知道我做错了什么。我已经测试过串行和并行(执行和 executeOnexecutor)并且 none 正在工作。 我一直在谷歌上搜索很多,但显然没有其他人在处理同样的问题。我究竟做错了什么?请帮助我!

我有一个带有 ListView 的 activity,我试图在其中添加 SwipeRefreshLayout。如果没有滑动布局,一切都会顺利进行。但是当我添加滑动时,在调用 onRefresh() 时出现以下错误。

致命错误:

*.*.*.AllNewsListPageActivity cannot be cast to *.*.*.AllNewsListPageActivity
java.lang.ClassCastException:*.*.AllNewsListPageActivity cannot be cast to *.*.AllNewsListPageActivity
        at **.AllNewsListPageAsync.<init>(AllNewsListPageAsync.java:27)
        at **.AllNewsListPageActivity.onRefresh(AllNewsListPageActivity.java:86)
        at android.support.v4.widget.SwipeRefreshLayout.onAnimationEnd(SwipeRefreshLayout.java:167)
        at android.support.v4.widget.CircleImageView.onAnimationEnd(CircleImageView.java:107)
        at android.view.ViewGroup.finishAnimatingView(ViewGroup.java:5269)
        at android.view.View.draw(View.java:14407)
        at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2947)
        at android.view.View.draw(View.java:14485)
        at android.view.View.getDisplayList(View.java:13379)
        at android.view.View.getDisplayList(View.java:13421)
        at android.view.View.draw(View.java:14199)
        at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
        at android.view.View.draw(View.java:14485)
        at android.widget.FrameLayout.draw(FrameLayout.java:472)
        at android.view.View.getDisplayList(View.java:13379)
        at android.view.View.getDisplayList(View.java:13421)
        at android.view.View.draw(View.java:14199)
        at android.view.ViewGroup.drawChild(ViewGroup.java:3103)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2940)
        at android.view.View.draw(View.java:14485)
        at android.support.v7.internal.widget.ActionBarOverlayLayout.draw(ActionBarOverlayLayout.java:509)

AllNewsListPageActivity 末尾的 $2 是什么?!

代码如下:

Activity.onCreate()

AllNewsListPageAsync temp = new AllNewsListPageAsync(new Object[]{this, listView});
    temp.execute();//executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);


    mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.activity_all_news_list_page_SwipeRefreshLayout);

    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            AllNewsListPageAsync temp = new AllNewsListPageAsync(new Object[]{this, listView});
            temp.execute();//executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
            mSwipeRefreshLayout.setRefreshing(false);

        }
    });

异步:

public class AllNewsListPageAsync extends AsyncTask<Object, Object, ArrayList<NewsDetailObject>> {


AllNewsListPageActivity context;
ListView listView;
Object[] temp;
String sessionId;
public AllNewsListPageAsync(Object[] params){
    temp = params;
    context = (AllNewsListPageActivity) temp[0];
    listView = (ListView) temp[1];
    sessionId = ((Application9090)context.getApplicationContext()).getSessionId();
}

protected ArrayList<NewsDetailObject> doInBackground(Object[] params) {
    ArrayList<NewsDetailObject> newsList = NewsFeedProxy.getAllNewsDetailObjectList(100, sessionId);
    return newsList;
}

@Override
public void onPostExecute(ArrayList<NewsDetailObject> newsDetailObjectsList){
    super.onPostExecute(newsDetailObjectsList);
    context.newsListIds = ArrayHelper.extractIds(newsDetailObjectsList);

    ((ProgressBar) context.findViewById(R.id.progressBar_activity_all_news_list_page)).setVisibility(View.GONE);

    AllNewsListPageAdapter test;
    test = new AllNewsListPageAdapter(context, R.layout.single_row, R.id.textViewTitleNewsTitle , newsDetailObjectsList);

    listView.setAdapter(test);

    return;
}

非常感谢任何帮助。 先谢谢了。

尝试更改

 AllNewsListPageAsync temp = new AllNewsListPageAsync(new Object[]{this, listView});

 AllNewsListPageAsync temp = new AllNewsListPageAsync(new Object[]{AllNewsListPageActivity.this, listView});

这里

mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        AllNewsListPageAsync temp = new AllNewsListPageAsync(new Object[]{this, listView});
        temp.execute();//executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        mSwipeRefreshLayout.setRefreshing(false);

    }
});

inside onRefresh 方法传递 onRefreshListener 的引用 class 将其更改为:

 mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        AllNewsListPageAsync temp = new AllNewsListPageAsync(new Object[]{AllNewsListPageActivity.this, listView});
        temp.execute();//executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        mSwipeRefreshLayout.setRefreshing(false);

    }
});