的AsyncTask操作我新的Android開發方面,作爲我學習的一部分,我想提出一個多語種的新聞閱讀器應用程序,該應用程序的獲取RSS從谷歌新聞和解析飼料。返回類型爲
對於這一點,我使用標籤視圖顯示多國語言,用戶可以通過不同的語言刷卡。應用程序包含印地文,馬拉雅拉姆語,英語和泰米爾語標籤,所有列出特定的新聞項目。
每種語言視圖頁是獨立的片段。並且應用程序中共有四個片段,主要活動包含所有這些。
所有這些片段我有一個AsyncTask擴展類,它加載和解析來自server.and的新聞,並在其doInBackground方法返回一個數組列表,但這個問題是當我從一個標籤滑動到另一個標籤非常慢。我正在粘貼我的代碼。我認爲我的AsyncTask用法不正確,因爲我在onPreExecute方法中顯示了一個進度條,但它也沒有正確顯示。
請人在看我的代碼,並幫助我糾正
EnglishNewsFragment.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ArrayList<HashMap<String, String>> newsWrapper;
context = getActivity();
View rootView = inflater.inflate(R.layout.english_news_fragment, container, false);
NewsLoader newsLoader = new NewsLoader(context, language);
newsLoader.execute();
try {
newsWrapper = newsLoader.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} finally {
showNews(newsWrapper);
}
return rootView;
}
NewsLoader
public class NewsLoader extends AsyncTask{
public NewsLoader(Context context, String language) {
this.context = context;
this.language = language;
}
@Override
protected void onPreExecute() {
startDialogue();
initAll(language);
}
@Override
protected ArrayList<HashMap<String, String>> doInBackground(Void... params) {
getNews();
news = processXML();
} catch (Exception e) {
e.printStackTrace();
}
return news;
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> aVoid) {
super.onPostExecute(aVoid);
stopDialogue();
}
}
UPDATE
AsyncTask.get()阻止用戶界面。所以我必須實現一個回調接口,任何人都可以幫助我做到這一點我已經從here讀了一點,但它將如何調用,以及如何將結果傳遞給MainActivity?
屏幕截圖
順便說一句:調用'super.onPostExecute()'和'super.onPreExecute()'是沒用的,因爲在超類中沒有默認實現 –
爲什麼你沒有使用onProgressUpdate來更新你的進度條? –
bcs我沒有更新進度,只顯示一個微調,它已經足夠了 – droidev