在我的android项目中,我使用AsyncTask来调用Facebook请求新闻源。
我遇到了AsyncTask的问题:在doInBackground请求完成之前执行了 OnPostExecute方法。
这是我的代码:
private class Task extends AsyncTask<Integer,Integer, Boolean>{
@Override
protected Boolean doInBackground(Integer... params) {
try {
if( Session.getActiveSession().getState().isOpened()){
Get_news_feed ();
return true;
}
return false;
}
catch (NullPointerException e) {
return false;
}
}
@Override
protected void onPostExecute(Boolean t) {
super.onPostExecute(t);
adapter =new Facebook_adapter(facebook.json.gen.klase.Obavijest.data,context);
actualListView.setAdapter(adapter);
adapter.notifyDataSetChanged();
mPullRefreshListView.onRefreshComplete();
}
}
Get_news_feed()
public void Get_news_feed () {
try {
Session.openActiveSessionFromCache(context);
if (Session.getActiveSession().getState().isOpened()) {
context.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Request.executeGraphPathRequestAsync(
Session.getActiveSession(), "me/home",new Request.Callback() {
@Override
public void onCompleted(
Response response) {
if (response.getGraphObject()!=null){
System.out.println("Json:"+response.getGraphObject().getInnerJSONObject());
});
}
});
}
} catch (Exception e2) {
System.out.println("Error:"+e2);
}
}
}
OnActivityCreated()
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
new Task().execute();
}
答案 0 :(得分:2)
在onPostExecute
之后doInBackground
方法始终执行。
你的问题是Get_news_feed
方法(在doInBackground
方法的后台执行)发布了一些要用runOnUiThread
在UI线程上完成的东西,然后返回(在UI线程上发布的东西被执行之前。)
如果您希望Get_news_feed
是同步的(在返回之前完成所有操作),则不应在UI线程上发布任何内容。
只需改为onPostExecute
中的所有UI内容。