如何在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);
}
});
两天来我一直对将 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);
}
});