2012-09-01 34 views
5

hoạt động này hoàn toàn tốt trên android 4.0.3 nhưng tôi nhận được lỗi trong android 2.3.3 bất kỳ trợ giúp nào sẽ được đánh giá cao. dòng được in đậm ném lỗi.Android 2.3.3 Gọi AsyncTask ném NoSuchFieldError

public class TestLoadingTask extends AsyncTask<Object, Object, Void> { 
} 

btndownload.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     if (util.isNetworkAvailable(NewTakeTest.this)) { 
       TestLoadingTask task; 
     task = new TestLoadingTask(); 
     task.currentposition = position; 
     task.testname = productsOnCloudList.getList().get(position).getProductname(); 
     **task.executeOnExecutor(task.THREAD_POOL_EXECUTOR, null);** 
    } 
    } 
}); 

tôi mới vào stackoverflow vì vậy nếu tôi không thể giải thích câu hỏi của mình đúng cách, xin hãy tha thứ cho tôi.

toàn bộ nhật ký như được đề cập bên dưới.

09-01 17:07:10.853 E/AndroidRuntime(21188): FATAL EXCEPTION: main 
09-01 17:07:10.853 E/AndroidRuntime(21188): java.lang.NoSuchFieldError: in.informationworks.app.CATapp.store.NewTakeTest$TestLoadingTask.THREAD_POOL_EXECUTOR 
09-01 17:07:10.853 E/AndroidRuntime(21188): at in.informationworks.app.CATapp.store.NewTakeTest$CloudCustomAdapter$1.onClick(NewTakeTest.java:973) 
09-01 17:07:10.853 E/AndroidRuntime(21188): at android.view.View.performClick(View.java:2533) 
09-01 17:07:10.853 E/AndroidRuntime(21188): at android.view.View$PerformClick.run(View.java:9320) 
09-01 17:07:10.853 E/AndroidRuntime(21188): at android.os.Handler.handleCallback(Handler.java:587) 
09-01 17:07:10.853 E/AndroidRuntime(21188): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-01 17:07:10.853 E/AndroidRuntime(21188): at android.os.Looper.loop(Looper.java:150) 
09-01 17:07:10.853 E/AndroidRuntime(21188): at android.app.ActivityThread.main(ActivityThread.java:4389) 
09-01 17:07:10.853 E/AndroidRuntime(21188): at java.lang.reflect.Method.invokeNative(Native Method) 
09-01 17:07:10.853 E/AndroidRuntime(21188): at java.lang.reflect.Method.invoke(Method.java:507) 
09-01 17:07:10.853 E/AndroidRuntime(21188): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
09-01 17:07:10.853 E/AndroidRuntime(21188): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 
09-01 17:07:10.853 E/AndroidRuntime(21188): at dalvik.system.NativeStart.main(Native Method) 
09-01 17:07:10.863 E/EmbeddedLogger( 180): App crashed! Process: in.informationworks.app.CATapp 

Trả lời

9

Bạn đã biên soạn ứng dụng của mình bằng cách sử dụng mục tiêu xây dựng API cấp 11 trở lên, nhưng bạn đang chạy ứng dụng trên API cấp 10 trở xuống. executeOnExecutor()THREAD_POOL_EXECUTOR đã được thêm vào API cấp 11 và không tồn tại trên các phiên bản Android trước đó. Bạn sẽ cần sử dụng android.os.Build để phát hiện bạn đang sử dụng phiên bản Android nào và sử dụng phương thức cũ hơn execute() trên các thiết bị đó.

Ví dụ:

@TargetApi(11) 
    static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task, 
              T... params) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); 
    } 
    else { 
     task.execute(params); 
    } 
    } 

Để sử dụng, tạo AsyncTask dụ của bạn, và gọi executeAsyncTask(), đi qua các đối tượng AsyncTask như tham số đầu tiên và bất cứ điều gì bạn muốn truyền cho doInBackground() như các thông số còn lại:

fooTask=new FooTask(); 
executeAsyncTask(fooTask, "these", "are", "optional"); 
+0

cảm ơn rất nhiều điều này đã làm việc cho tôi – user1640445

+0

hey Mark, tôi đã sử dụng mã này, bao gồm @TargetApi (11) trên ứng dụng của tôi với minSdk 8. Nhưng nhật thực vẫn hiển thị lỗi trên Build.VERSION_CODES. HONEYCOMB và AsyncTask.THREAD_POOL_EXECUTOR (cả hai đều không có trong api v8). Điều gì có thể là lý do? –

+0

@AswinKumar: Mục tiêu xây dựng của bạn (ví dụ: Project> Properties> Android trong Eclipse) cần phải là API cấp 11 trở lên. – CommonsWare

Các vấn đề liên quan