Сегодня как и обещал хотел посвятить статью работой с AsyncTask. AsyncTask - это класс который предназначен для выполнения операций отдельно от UI потока и передача результатов выполнения в основной поток.
Продолжим реализацию CategoryActivity , мы хотим подгрузить категории и отобразить их в ListView.
Как видим данный класс имеет три основных метода onPreExecute(выполняется перед doInBackground, имеет доступ к UI), doInBackground(выполняется в новом потоке, здесь мы и выполняем основную работу), onPostExecute(после выполнения doInBackground,не выполняется если AsyncTask отменен).
В нашем примере мы получаем данные в doInBackground и onPostExecute создаем SimpleAdapter для ListView. Затем в onCreate запускаем наш AsyncTask и делаем обработчик для ListView :
Продолжим реализацию CategoryActivity , мы хотим подгрузить категории и отобразить их в ListView.
private class AsyncCaller extends AsyncTask<Void, Void, Void> {
ProgressDialog pdLoading = new ProgressDialog(CategoryActivity.this);
@Override
protected void onPreExecute() {
super.onPreExecute();
pdLoading.setMessage("\tЗагрузка...");
pdLoading.show();
}
@Override
protected Void doInBackground(Void... params) {
api = new API();
categoriesArr = api.getCategoryQuiz();
Log.d("size", categoriesArr.size() + "");
for (int i = 0; i < categoriesArr.size(); i++) {
Map<String, String> category = new HashMap<String, String>();
category.put("category_id",
String.valueOf(categoriesArr.get(i).getCategoryId()));
category.put("category_name", categoriesArr.get(i)
.getCategoryName());
categoryList.add(category);
}
return null;
}
@Override
protected void onPostExecute(Void v) {
pdLoading.dismiss();
SimpleAdapter sAdapter = new SimpleAdapter(CategoryActivity.this,
categoryList, android.R.layout.simple_list_item_1,
new String[] { "category_name" },
new int[] { android.R.id.text1 });
lvCategory.setAdapter(sAdapter);
}
}
Как видим данный класс имеет три основных метода onPreExecute(выполняется перед doInBackground, имеет доступ к UI), doInBackground(выполняется в новом потоке, здесь мы и выполняем основную работу), onPostExecute(после выполнения doInBackground,не выполняется если AsyncTask отменен).
В нашем примере мы получаем данные в doInBackground и onPostExecute создаем SimpleAdapter для ListView. Затем в onCreate запускаем наш AsyncTask и делаем обработчик для ListView :
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.category);
lvCategory = (ListView) findViewById(R.id.lvCategories);
lvCategory.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getApplicationContext(),
categoryList.get(position).get("category_id"),
Toast.LENGTH_SHORT).show();
}
});
new AsyncCaller().execute();
}
В общем как-то так . Это лишь небольшая часть информации которая посвящена работе с AsyncTask , но и ее будет достаточно для выполнения большинства тривиальных задач.
Комментариев нет:
Отправить комментарий