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!

4 Solutions collect form web for “ASync Task no se puede ejecutar dos veces”

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.

  • Vaciar RecyclerView utilizando datos obtenidos de parse.com
  • Android cómo convertir json array a string array
  • No conseguir el pulgar con géneros - jugador de música universal
  • buena json lib como ios JSONModel
  • ¿Cómo puedo poner tipo genérico para TypeToken de Gson?
  • Cómo obtener JSON Array dentro de JSON objeto?
  • Android Json y valores nulos
  • Formato JSON Body for Retrofit de una sola cadena sin modelo
  • Se esperaba BEGIN_OBJECT pero era BEGIN_ARRAY en la línea 1 columna 2 (edición pequeña)
  • Aparece la tecla "nameValuePairs" extraña cuando se utiliza Gson
  • Límite de longitud en los parámetros JSON en la solicitud GET
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.