I'm sangat baru untuk pemrograman dan saya memiliki beberapa keraguan.
Saya memiliki AsyncTask
yang saya sebut sebagai RunInBackGround
.
dan saya memulai proses ini seperti:
new RunInBackGround().execute();
Tapi aku ingin menunggu sampai panggilan ini selesai mengeksekusi, sebelum melanjutkan ke pernyataan lain dari kode.
Bagaimana saya bisa melakukan itu?
Apakah ada cara untuk itu?
menunggu sampai panggilan ini selesai mengeksekusi
Anda akan perlu untuk memanggil AsyncTask.get() metode untuk mendapatkan hasil kembali dan membuat menunggu sampai doInBackground
eksekusi tidak lengkap. tapi ini akan membeku Utama UI benang jika anda tidak mendapatkan metode dalam suatu Thread.
Untuk mendapatkan hasil kembali UI Benang mulai AsyncTask
sebagai :
String str_result= new RunInBackGround().execute().get();
Meskipun secara optimal akan lebih baik jika kode anda dapat berjalan paralel, hal ini dapat menjadi kasus anda're hanya menggunakan benang sehingga anda tidak memblokir thread UI, bahkan jika aplikasi anda's penggunaan aliran akan harus menunggu untuk itu.
Anda've punya cukup banyak 2 pilihan berikut;
Anda dapat mengeksekusi kode yang anda ingin menunggu, di AsyncTask itu sendiri. Jika itu ada hubungannya dengan memperbarui UI(benang), anda dapat menggunakan onPostExecute metode. Ini akan dipanggil secara otomatis ketika anda latar belakang pekerjaan dilakukan.
Jika anda untuk beberapa alasan yang memaksa untuk melakukan hal itu dalam Kegiatan/Fragment/Apapun, anda juga dapat membuat sendiri kustom pendengar, yang disiarkan dari AsyncTask. Dengan menggunakan ini, anda dapat memiliki metode callback dalam Aktivitas anda/Fragment/Apapun yang hanya dipanggil ketika anda ingin: alias ketika anda AsyncTask dilakukan dengan apa pun yang anda telah menunggu.
Di AsyncTask
tambahkan satu ProgressDialog seperti:
private final ProgressDialog dialog = new ProgressDialog(YourActivity.this);
anda dapat setMessage di onPreExecute()
metode seperti:
this.dialog.setMessage("Processing...");
this.dialog.show();
dan di onPostExecute(Void hasil)
metode mengabaikan ProgressDialog
.
AsyncTask memiliki empat metode..
onPreExecute -- for doing something before calling background task in Async
doInBackground -- operation/Task to do in Background
onProgressUpdate -- it is for progress Update
onPostExecute -- this method calls after asyncTask return from doInBackground.
anda dapat memanggil anda bekerja pada onPostExecute()
itu panggilan setelah kembali dari doInBackground()
onPostExecute adalah apa yang anda butuhkan untuk Melaksanakan.
Saya pikir cara termudah adalah untuk menciptakan sebuah antarmuka untuk mendapatkan data dari onpostexecute dan menjalankan Ui dari antarmuka :
Membuat Interface :
public interface AsyncResponse {
void processFinish(String output);
}
Kemudian di asynctask
@Override
protected void onPostExecute(String data) {
delegate.processFinish(data);
}
Kemudian di sidik kegiatan utama
@Override
public void processFinish(String data) {
// do things
}