ASync Task no se puede ejecutar dos veces

Estoy trabajando en una aplicación que necesita subir un archivo al servidor. Sin embargo, para cargar los archivos que necesita para iniciar sesión (trabajo), a continuación, obtener la URL (de trabajo), a continuación, cargar (Force Close)

El logcat:

10-13 14:10:27.494: E/AndroidRuntime(26578): FATAL EXCEPTION: main 10-13 14:10:27.494: E/AndroidRuntime(26578): java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once) 10-13 14:10:27.494: E/AndroidRuntime(26578): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:578) 10-13 14:10:27.494: E/AndroidRuntime(26578): at android.os.AsyncTask.execute(AsyncTask.java:534) 10-13 14:10:27.494: E/AndroidRuntime(26578): at com.spxc.bayfiles.FilesActivity.onOptionsItemSelected(FilesActivity.java:294) 10-13 14:10:27.494: E/AndroidRuntime(26578): at com.actionbarsherlock.app.SherlockActivity.onMenuItemSelected(SherlockActivity.java:208) 10-13 14:10:27.494: E/AndroidRuntime(26578): at com.actionbarsherlock.ActionBarSherlock.callbackOptionsItemSelected(ActionBarSherlock.java:603) 10-13 14:10:27.494: E/AndroidRuntime(26578): at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchOptionsItemSelected(ActionBarSherlockNative.java:93) 10-13 14:10:27.494: E/AndroidRuntime(26578): at com.actionbarsherlock.app.SherlockActivity.onOptionsItemSelected(SherlockActivity.java:159) 10-13 14:10:27.494: E/AndroidRuntime(26578): at android.app.Activity.onMenuItemSelected(Activity.java:2566) 10-13 14:10:27.494: E/AndroidRuntime(26578): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:986) 10-13 14:10:27.494: E/AndroidRuntime(26578): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735) 10-13 14:10:27.494: E/AndroidRuntime(26578): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 10-13 14:10:27.494: E/AndroidRuntime(26578): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) 10-13 14:10:27.494: E/AndroidRuntime(26578): at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:547) 10-13 14:10:27.494: E/AndroidRuntime(26578): at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:115) 10-13 14:10:27.494: E/AndroidRuntime(26578): at android.view.View.performClick(View.java:4240) 10-13 14:10:27.494: E/AndroidRuntime(26578): at android.view.View$PerformClick.run(View.java:17721) 10-13 14:10:27.494: E/AndroidRuntime(26578): at android.os.Handler.handleCallback(Handler.java:730) 10-13 14:10:27.494: E/AndroidRuntime(26578): at android.os.Handler.dispatchMessage(Handler.java:92) 10-13 14:10:27.494: E/AndroidRuntime(26578): at android.os.Looper.loop(Looper.java:137) 10-13 14:10:27.494: E/AndroidRuntime(26578): at android.app.ActivityThread.main(ActivityThread.java:5103) 10-13 14:10:27.494: E/AndroidRuntime(26578): at java.lang.reflect.Method.invokeNative(Native Method) 10-13 14:10:27.494: E/AndroidRuntime(26578): at java.lang.reflect.Method.invoke(Method.java:525) 10-13 14:10:27.494: E/AndroidRuntime(26578): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 10-13 14:10:27.494: E/AndroidRuntime(26578): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 10-13 14:10:27.494: E/AndroidRuntime(26578): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:112) 10-13 14:10:27.494: E/AndroidRuntime(26578): at dalvik.system.NativeStart.main(Native Method) 

Mi código: (handleJsonObject):

 private void handleJsonObject(JSONObject object) { try { sUpload = object.getString("uploadUrl"); HttpClient httpclient = new DefaultHttpClient(); //post request to send the video File sdCardRoot = Environment.getExternalStorageDirectory(); File myDir = new File(sdCardRoot, "Download"); HttpPost httppost = new HttpPost(sUpload); StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy( policy); FileBody video_file1 = new FileBody(new File(myDir + "/test.txt")); MultipartEntity reqEntity = new MultipartEntity(); reqEntity.addPart("file=", video_file1); httppost.setEntity(reqEntity); // DEBUG System.out.println( "executing request " + httppost.getRequestLine( ) ); HttpResponse response = null; try { response = httpclient.execute( httppost ); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } HttpEntity resEntity = response.getEntity( ); // DEBUG System.out.println( response.getStatusLine( ) ); if (resEntity != null) { try { System.out.println( EntityUtils.toString( resEntity ) ); } catch (org.apache.http.ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // end if if (resEntity != null) { try { resEntity.consumeContent( ); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // end if httpclient.getConnectionManager( ).shutdown( ); } catch (JSONException e) { Log.e("log_tag", "Error parsing data: " + e.toString()); Crouton.makeText(this, "Something went wrong!", Style.ALERT).show(); } } 

El código (aSync) que llama al código postal (handleJsonObject):

 asyncTask.setJsonListener(new JsonListener() { public void onObjectReturn(JSONObject object) { handleJsonObject(object); } }); asyncTask.execute("http://api.bayfiles.net/v1/file/uploadUrl?session=" + sessionId); 

No puedo entender por qué el código no funciona? ¡Cualquier ayuda es muy apreciada!

Como explica la excepción en sí, no puede ejecutar una AsyncTask más de una vez, a menos que cree una new instancia de la misma y llame a .execute .

Por ejemplo:

 async = new AsyncTask(); async.execute(); 

* Para ejecutar más de una vez, es necesario volver a crear la instancia (usando new ) el número de veces que desea ejecutarlo .

Yo uso este código y funciona para mí:

  if ((eliminar_op_async != null) && eliminar_op_async.getStatus() == AsyncTask.Status.RUNNING) { if (eliminar_op_async.isCancelled()) { eliminar_op_async = new EliminarOperacion(); eliminar_op_async.execute(id_operacion,posicion_operacion); } else { // Nada } } if ((eliminar_op_async != null) && eliminar_op_async.getStatus() == AsyncTask.Status.PENDING) { eliminar_op_async.execute(id_operacion,posicion_operacion); } if ((eliminar_op_async != null) && eliminar_op_async.getStatus() == AsyncTask.Status.FINISHED) { eliminar_op_async = new EliminarOperacion(); eliminar_op_async.execute(id_operacion,posicion_operacion); } if (eliminar_op_async == null) { eliminar_op_async = new EliminarOperacion(); eliminar_op_async.execute(id_operacion,posicion_operacion); } 

Puede cancelar llamando a async instance con async.cancel (true) para que pueda asegurarse de que sólo hay una instancia de async

No puede ejecutar AsyncTask más de una vez, por lo tanto, para corregir este error, simplemente envolverlo en una condición como esta: async = new AsyncTask ();

  if (async==null){ async.execute(); } 

Este error normalmente se produce cuando intenta ejecutar Asynctask en un viewpager. Cuando ejecuta asynctask en un fragmento y desliza el siguiente fragmento, volver al fragmento anterior desencadena una reexecución del asynctask en ese fragmento que causa la caída de la aplicación. Por lo tanto, tiene que comprobar si el asynctask ya se ha ejecutado envolviéndolo en una condición.

  • Cómo serializar objeto a JSON?
  • ¿Cómo comprobar si existe una llave json?
  • Android JSONObject vs GSON
  • JSONException: El valor del tipo java.lang.String no se puede convertir en JSONObject
  • Analiza el formato de fecha de JSON en String usando GSON en Android
  • ¿Puedo conectar android (Eclipse) a SQL Server (2005) usando servicios web de php?
  • Parse JSON sin sucesión de bloques Try-Catch
  • Permiso de la API de Youtube 403 Error prohibido
  • Android crea una cadena Json
  • XML vs JSON. ¿Cuál es mejor para almacenar un pequeño fragmento de datos?
  • cómo guardar datos de json en sqlite en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.