Tôi không muốn chuyển bất kỳ đối số nào sang phương thức doInBackground
của AsyncTask.Cách sử dụng AsyncTask đúng cách trong Android
Vì vậy, mã phải như thế nào?
Tôi không muốn chuyển bất kỳ đối số nào sang phương thức doInBackground
của AsyncTask.Cách sử dụng AsyncTask đúng cách trong Android
Vì vậy, mã phải như thế nào?
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
public class AsyncExample extends Activity{
private String url="http://www.google.co.in";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
new AsyncCaller().execute();
}
private class AsyncCaller extends AsyncTask<Void, Void, Void>
{
ProgressDialog pdLoading = new ProgressDialog(AsyncExample.this);
@Override
protected void onPreExecute() {
super.onPreExecute();
//this method will be running on UI thread
pdLoading.setMessage("\tLoading...");
pdLoading.show();
}
@Override
protected Void doInBackground(Void... params) {
//this method will be running on background thread so don't update UI frome here
//do your long running http tasks here,you dont want to pass argument and u can access the parent class' variable url over here
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
//this method will be running on UI thread
pdLoading.dismiss();
}
}
}
Thanx! Đó là những gì tôi muốn ...: D – omerjerk
Tôi rất vui được giúp đỡ :-) –
Sự khác biệt TRUE giữa Mehul Ranpara và Mehul Joisar ở đây là Joisar muốn được giúp đỡ mà không nêu lên câu hỏi nhưng Ranpara muốn làm tức giận mọi người khác tại bài đăng này….Vì vậy, tôi chào Mehul Joisar vì đã tử tế với câu trả lời cho câu hỏi bất kể nhà nước ... – Vincy
Tại sao bạn không muốn chuyển bất kỳ đối số nào cho nó? Bạn nên giải thích ...
Đây là cách nó thường làm việc (ví dụ):
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i/(float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
Và để thực hiện nó, bạn gọi:
new DownloadFilesTask().execute(url1, url2, url3);
Nguồn: Android docs
Thông thường, các thông số được chuyển đến 'AsyncTask' nhưng không cần thiết – codeMagic
không cần tôi chuyển đối số tới 'doInBakground'. phương pháp này chỉ mở tệp php trên máy chủ web của tôi theo phương thức POST. Và tôi chỉ cần nhận được phản hồi từ tệp php đó. Vì vậy, tôi không cần truyền bất kỳ đối số nào cho 'doInBackground'. – omerjerk
Đơn giản - bạn chỉ cần sử dụng lớp 'Void'. Vì vậy, bạn sẽ có 'lớp học riêng DownloadFilesTask mở rộng AsyncTask
Tạo của bạn AsyncTask
lớp như thể bạn không muốn chuyển bất kỳ thông số nào đến doInBackground
:
public class LongOperation extends AsyncTask<Void, Void, String> {
public LongOperation(Context context) {
}
@Override
protected void onPreExecute() {
}
@Override
protected String doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(String result) {
}
}
và bắt đầu AsyncTask như chưa trải qua bất kỳ thông số để thực hiện:
LongOperation longOperation = new LongOperation(this);
longOperation.execute();
Tôi nhận thấy tính năng tự động hoàn tất của Android Studio không cung cấp cho bạn "
Theo AsyncTask, nó
AsyncTask<Params, Progress, Result>
Vì vậy, nếu bạn muốn bỏ trống trong doInBackground chỉ vượt qua khoảng trống thay cho Params.
Ví dụ mã:
class DownloadLink extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
//Do Your stuff here..
return null;
}
}
Và gọi nó là:
new DownloadLink().execute();
Điều đó có nghĩa là các tham số là mảng nhiệm vụ và mọi kiểu trả về của tác vụ là void – blackHawk
@blackHawk - Có –
những gì bạn đã thử? –
hãy thử điều gì đó trước khi bạn đăng nội dung nào đó ... đọc blog và hướng dẫn dành cho nhà phát triển – NullPointerException