(Nói một cách chính xác) KHÔNG thể chuyển nhiều nguyên mẫu cho AsyncTask. Ví dụ: nếu bạn muốn thực hiện myTask.execute(long1, long2)
và cố gắng thiết lập private class myTask extends AsyncTask<long, Void, Void>
bằng phương pháp tương ứng:
@Override
protected LocationItemizedOverlay doInBackground(long... params) {...}
IDE của bạn có thể sẽ phàn nàn về việc cần ghi đè phương thức supertype. Lưu ý rằng bạn đang sử dụng cái gọi là chữ ký phương thức Varargs cho doInBackground
, nơi(long... params)
giống như nói rằng "Tôi chấp nhận một số lượng dài có thể thay đổi, được lưu trữ dưới dạng một mảng có tên là tham số. Tôi không hoàn toàn hiểu nguyên nhân dẫn đến khiếu nại về trình biên dịch / IDE , nhưng tôi nghĩ nó liên quan đến cách Params
định nghĩa lớp chung .
Trong mọi trường hợp, bạn có thể đạt được những gì bạn muốn mà không có vấn đề gì, miễn là bạn truyền chính xác các nguyên thủy của mình tới các trình bao bọc không nguyên thủy tương ứng của chúng (ví dụ: int => Integer, long => Long, v.v.). Trên thực tế, bạn không cần phải chuyển các nguyên thủy của mình thành không nguyên thủy một cách rõ ràng. Java dường như xử lý điều đó cho bạn. Bạn chỉ cần thiết lập ASyncTask của mình như sau (ví dụ về longs):
private class MyTask extends AsyncTask<Long, Void, Void> {
@Override
protected void doInBackground(Long... params) {
long myFirstParam = params[0]
}
...
}
Sau đó, bạn có thể sử dụng lớp này như dự định ban đầu, ví dụ:
MyTask myTask = new MyTask();
myTask.execute(long1, long2);
Hoặc đối với bất kỳ số nguyên thủy nào mà bạn muốn, HÃY CUNG CẤP CHÚNG LÀ LOẠI CÙNG LOẠI. Nếu bạn cần chuyển nhiều loại nguyên thủy, điều này cũng có thể được thực hiện, nhưng bạn sẽ cần sửa đổi những điều trên để:
private class MyTask extends AsyncTask<Object, Void, Void> {
@Override
protected void doInBackground(Object... params) {
long myLongParam = (Long) params[0];
int myIntParam = (Integer) params[1];
}
...
}
Điều này linh hoạt hơn, nhưng nó yêu cầu truyền các tham số một cách rõ ràng đến các kiểu tương ứng của chúng. Nếu không cần sự linh hoạt này (tức là một kiểu dữ liệu duy nhất), tôi khuyên bạn nên chọn tùy chọn đầu tiên, vì nó dễ đọc hơn một chút.