¿Cómo puedo utilizar una tarea asíncrona para cargar un archivo en el servidor?

A continuación se muestra mi código para subir un archivo al servidor. Pero estoy recibiendo excepciones de red incluso después de varios intentos e incluso después de agregar el modo estricto.

Soy nuevo en Android y no sé cómo puedo utilizar la tarea asíncrona, que muchas personas aconsejan para este tipo de operación de red. ¿Podría alguien decirme que donde estoy equivocado en el código y dónde debo utilizar la tarea asíncrona?

package de.fileuploader; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.ByteArrayBody; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.os.StrictMode; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; @SuppressWarnings("unused") public class Android_helloActivity extends Activity { private String newName = "SMSBackup.txt"; private String uploadFile = "/mnt/sdcard/SMSBackup.txt"; private String actionUrl = "http://192.168.1.8:8080/admin/admin/uploads"; // private String // actionUrl="http://upload-file.shcloudapi.appspot.com/upload"; private TextView mText1; private TextView mText2; private Button mButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() // or .detectAll() for all detectable problems .penaltyLog() .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() .detectLeakedClosableObjects() .penaltyLog() .penaltyDeath() .build()); mText1 = (TextView) findViewById(R.id.myText2); mText1.setText("Upload\n" + uploadFile); mText2 = (TextView) findViewById(R.id.myText3); mText2.setText("To Server Location\n" + actionUrl); mButton = (Button) findViewById(R.id.myButton); mButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { /* uploadFile(); */ try { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpPost httpPost = new HttpPost(actionUrl); MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE); entity.addPart("name", new StringBody(newName)); File file=new File(uploadFile); entity.addPart("file", new FileBody(file)); //entity.addPart("file", new ByteArrayBody(data,"myImage.jpg")); entity.addPart("gps", new StringBody("35.6,108.6")); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost, localContext); BufferedReader reader = new BufferedReader( new InputStreamReader(response.getEntity().getContent(), "UTF-8")); String sResponse = reader.readLine(); Log.i("info", "test"); } catch (Exception e) { // Log.e("exception", e.printStackTrace()); e.printStackTrace(); showDialog("" + e); } } }); } private void showDialog(String mess) { new AlertDialog.Builder(Android_helloActivity.this).setTitle("Message") .setMessage(mess) .setNegativeButton("Exit", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }).show(); } } 

 mButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { new UploadImageTask().execute(); // initialize asynchronous task }}); //Now implement Asynchronous Task public class Get_User_Data extends AsyncTask<Void, Void, Void> { private final ProgressDialog dialog = new ProgressDialog( MyActivity.this); protected void onPreExecute() { this.dialog.setMessage("Loading..."); this.dialog.setCancelable(false); this.dialog.show(); } @Override protected Void doInBackground(Void... params) { uploadImage(); // inside the method paste your file uploading code return null; } protected void onPostExecute(Void result) { // Here if you wish to do future process for ex. move to another activity do here if (dialog.isShowing()) { dialog.dismiss(); } } } 

Para obtener más información, consulte este enlace http://vikaskanani.wordpress.com/2011/01/29/android-image-upload-activity/

 /** * *******Async Task for Use this UTILITY CLASS * * pass the file which need to upload * * Progress dialog commente/ Uncomment according requirment*******/ private class ImageUploaderTask extends AsyncTask<String, Integer, Void> { @Override protected void onPreExecute(){ // simpleWaitDialog = ProgressDialog.show(BlogPostExamplesActivity.this, "Wait", "Uploading Image"); } @Override protected Void doInBackground(String... params) { new ImageUploadUtility().uploadSingleImage(params[0]); return null; } @Override protected void onPostExecute(Void result){ // simpleWaitDialog.dismiss(); } /** * Method uploads the image using http multipart form data. * We are not using the default httpclient coming with android we are using the new from apache * they are placed in libs folder of the application * * @param imageData * @param filename * @return * @throws Exception */ static boolean doUploadinBackground(final byte[] imageData, String filename) throws Exception{ String responseString = null; PostMethod method; method = new PostMethod("your url to upload"); org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout( 100000); FilePart photo = new FilePart("userfile", new ByteArrayPartSource( filename, imageData)); photo.setContentType("image/jpeg"); photo.setCharSet(null); String s = new String(imageData); Part[] parts = { new StringPart("latitude", "123456"), new StringPart("longitude","12.123567"), new StringPart("imei","1234567899"), new StringPart("to_email","some email"), photo }; method.setRequestEntity(new MultipartRequestEntity(parts, method .getParams())); client.executeMethod(method); responseString = method.getResponseBodyAsString(); method.releaseConnection(); Log.e("httpPost", "Response status: " + responseString); if (responseString.equals("SUCCESS")) { return true; } else { return false; } } /** * Simple Reads the image file and converts them to Bytes * * @param file name of the file * @return byte array which is converted from the image * @throws IOException */ public static byte[] getBytesFromFile(File file) throws IOException { InputStream is = new FileInputStream(file); // Get the size of the file long length = file.length(); // You cannot create an array using a long type. // It needs to be an int type. // Before converting to an int type, check // to ensure that file is not larger than Integer.MAX_VALUE. if (length > Integer.MAX_VALUE) { // File is too large } // Create the byte array to hold the data byte[] bytes = new byte[(int)length]; // Read in the bytes int offset = 0; int numRead = 0; while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) { offset += numRead; } // Ensure all the bytes have been read in if (offset < bytes.length) { throw new IOException("Could not completely read file "+file.getName()); } // Close the input stream and return bytes is.close(); return bytes; } } 
  • GreenDao getter para entidades relacionadas devuelve lista vacía
  • Anular los temas predeterminados de Android
  • Cómo obtener un valor aleatorio de una matriz de cadenas en android?
  • MBTilesRasterDataSource no se encuentra en nutiteq SDK?
  • ¿Cómo puedo descifrar la URL en la aplicación Android
  • ¿Cómo deshacerse de la advertencia de llamada sospechosa en Android Studio?
  • Cómo mostrar 3 fragmentos dentro de PageViewer
  • Margen de visión establecido para Android por programación
  • Cómo utilizar el lector de PDF Radaee sdk
  • RxJava: ¿Cómo puedo hacer una observación de búsqueda-una vez-y-reutilización?
  • Cómo recibir la última emisión de secuencia al llamar a rx.Observable.sample ()?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.