2012-09-01 16 views
5

esto funciona perfectamente bien en Android 4.0.3 pero obtengo un error en Android 2.3.3 cualquier ayuda sería muy apreciada. la línea que está en negrita arroja un error.Android 2.3.3 llamada AsyncTask lanza 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);** 
    } 
    } 
}); 

soy nuevo en stackoverflow por lo que si no puedo explicar mi pregunta correctamente, por favor perdónenme.

todo el registro es como se menciona a continuación.

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 

Respuesta

9

Ha compilado su aplicación utilizando un tipo de generación de API de nivel 11 o superior, pero está ejecutando la aplicación en la API de nivel 10 o inferior. executeOnExecutor() y THREAD_POOL_EXECUTOR se agregaron en API Nivel 11 y no existen en versiones anteriores de Android. Tendrá que usar android.os.Build para detectar en qué versión de Android está y usar el método anterior execute() en dichos dispositivos.

Por ejemplo:

@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); 
    } 
    } 

Para usar esto, crea la instancia AsyncTask, y llaman executeAsyncTask(), pasando el objeto AsyncTask como primer parámetro y todo lo que desea que pasó a doInBackground() como los restantes parámetros:

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

muchas gracias, esto funcionó para mí – user1640445

+0

hey Mark, utilicé este código, incluido el @TargetApi (11) en mi aplicación con minSdk 8. Pero eclipse todavía muestra un error en Build.VERSION_CODES. HONEYCOMB y AsyncTask.THREAD_POOL_EXECUTOR (ninguno disponible en la api v8). ¿Cuál podría ser la razón? –

+0

@AswinKumar: su objetivo de compilación (p. Ej., Proyecto> Propiedades> Android en Eclipse) debe ser API Nivel 11 o superior. – CommonsWare

Cuestiones relacionadas