2014-03-26 3 views
1

Это код для загрузки изображения из моей галереи на сервер, этот код работает.Как отменить загрузку файла из галереи на сервер

Но при нажатии кнопки «Назад» его загрузка.

Теперь, что я прошу, когда я нажимаю кнопку «Назад», он должен перейти на предыдущую страницу, и загрузка должна прекратиться.

Как я могу это сделать?

Вот мой код:

package com.politicalmileage.chintamanvanga; 

import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.Set; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class ContributeToTheSite extends Activity implements OnClickListener{ 

    private TextView messageText; 
    private Button uploadButton, btnselectpic; 
    private ImageView imageview; 
    private int serverResponseCode = 0; 
    private ProgressDialog dialog = null; 

    private String upLoadServerUri = null; 
    private String imagepath=null; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.contributetothesite); 

     uploadButton = (Button)findViewById(R.id.uploadButton); 
     messageText = (TextView)findViewById(R.id.messageText); 
     btnselectpic = (Button)findViewById(R.id.button_selectpic); 
     imageview = (ImageView)findViewById(R.id.imageView_pic); 

     btnselectpic.setOnClickListener(this); 
     uploadButton.setVisibility(View.INVISIBLE); 
     uploadButton.setOnClickListener(this); 
     upLoadServerUri = "http://url"; 
    } 


    @Override 
    public void onClick(View arg0) { 
     if(arg0==btnselectpic) 
     { 
      Intent intent = new Intent(); 
      intent.setType("image/*"); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(Intent.createChooser(intent, "Complete action using"), 1); 

     } 
     else if (arg0==uploadButton) { 

      dialog = ProgressDialog.show(ContributeToTheSite.this, "", "Uploading file...", true); 
      messageText.setText("uploading started....."); 
      new Thread(new Runnable() { 
       public void run() { 

         uploadFile(imagepath); 

       } 
       }).start(); 

     }   

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     if (requestCode == 1 && resultCode == RESULT_OK) { 
      //Bitmap photo = (Bitmap) data.getData().getPath(); 

      Uri selectedImageUri = data.getData(); 
      imagepath = getPath(selectedImageUri); 
      Bitmap bitmap=BitmapFactory.decodeFile(imagepath); 
      imageview.setImageBitmap(bitmap); 
      messageText.setText("Uploading file path:" +imagepath); 
      uploadButton.setVisibility(View.VISIBLE); 
     } 
    } 
     public String getPath(Uri uri) { 
       String[] projection = { MediaStore.Images.Media.DATA }; 
       Cursor cursor = managedQuery(uri, projection, null, null, null); 
       int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
       cursor.moveToFirst(); 
       return cursor.getString(column_index); 
      } 

    public int uploadFile(String sourceFileUri) { 


      String fileName = sourceFileUri; 

      HttpURLConnection conn = null; 
      DataOutputStream dos = null; 
      String lineEnd = "\r\n"; 
      String twoHyphens = "--"; 
      String boundary = "*****"; 
      int bytesRead, bytesAvailable, bufferSize; 
      byte[] buffer; 
      int maxBufferSize = 1 * 1024 * 1024; 
      File sourceFile = new File(sourceFileUri); 

      if (!sourceFile.isFile()) { 

       dialog.dismiss(); 

       Log.e("uploadFile", "Source File not exist :"+imagepath); 

       runOnUiThread(new Runnable() { 
        public void run() { 
         messageText.setText("Source File not exist :"+ imagepath); 
        } 
       }); 

       return 0; 

      } 
      else 
      { 
       try { 

        // open a URL connection to the Servlet 
        FileInputStream fileInputStream = new FileInputStream(sourceFile); 
        URL url = new URL(upLoadServerUri); 

        // Open a HTTP connection to the URL 
        conn = (HttpURLConnection) url.openConnection(); 
        conn.setDoInput(true); // Allow Inputs 
        conn.setDoOutput(true); // Allow Outputs 
        conn.setUseCaches(false); // Don't use a Cached Copy 
        conn.setRequestMethod("POST"); 
        conn.setRequestProperty("Connection", "Keep-Alive"); 
        conn.setRequestProperty("ENCTYPE", "multipart/form-data"); 
        conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
        conn.setRequestProperty("uploaded_file", fileName); 

        dos = new DataOutputStream(conn.getOutputStream()); 

        dos.writeBytes(twoHyphens + boundary + lineEnd); 
        dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" 
              + fileName + "\"" + lineEnd); 

        dos.writeBytes(lineEnd); 

        // create a buffer of maximum size 
        bytesAvailable = fileInputStream.available(); 

        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        buffer = new byte[bufferSize]; 

        // read file and write it into form... 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

        while (bytesRead > 0) { 

        dos.write(buffer, 0, bufferSize); 
        bytesAvailable = fileInputStream.available(); 
        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

        } 

        // send multipart form data necesssary after file data... 
        dos.writeBytes(lineEnd); 
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

        // Responses from the server (code and message) 
        serverResponseCode = conn.getResponseCode(); 
        String serverResponseMessage = conn.getResponseMessage(); 

        Log.i("uploadFile", "HTTP Response is : " 
          + serverResponseMessage + ": " + serverResponseCode); 

        if(serverResponseCode == 200){ 

         runOnUiThread(new Runnable() { 
          public void run() { 
           String msg = "File Upload Completed.\n\n Thanks for Your Contribution to the Mobile App"; 
           messageText.setText(msg); 
           Toast.makeText(ContributeToTheSite.this, "Thanks for Your Contribution to the Mobile App.", Toast.LENGTH_SHORT).show();        
           finish(); 
          } 
         });     
        }  

        //close the streams // 
        fileInputStream.close(); 
        dos.flush(); 
        dos.close(); 

       } catch (MalformedURLException ex) { 

        dialog.dismiss(); 
        ex.printStackTrace(); 

        runOnUiThread(new Runnable() { 
         public void run() { 
          messageText.setText("MalformedURLException Exception : check script url."); 
          Toast.makeText(ContributeToTheSite.this, "MalformedURLException", Toast.LENGTH_SHORT).show(); 
         } 
        }); 

        Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
       } catch (Exception e) { 

        dialog.dismiss(); 
        e.printStackTrace(); 

        runOnUiThread(new Runnable() { 
         public void run() { 
          messageText.setText("Got Exception : see logcat "); 
          Toast.makeText(ContributeToTheSite.this, "Got Exception : see logcat ", Toast.LENGTH_SHORT).show(); 
         } 
        }); 
        Log.e("Upload file to server Exception", "Exception : " + e.getMessage(), e); 
       } 
       dialog.dismiss();  
       return serverResponseCode; 

      } // End else block 
     } 

} 
+0

использовать обработчик http://developer.android .com/reference/android/os/Handler.html, а затем вы можете остановить обработчик, когда захотите, но имейте в виду, что он не гарантирует, что он не загружается. И вы можете взглянуть на http://developer.android.com/reference/android/os/AsyncTask.html –

+0

привет, дайте мне небольшой пример – user3374790

ответ

0

попробовать это

public void onBackPressed() { 
    // Do Here what ever you want do on back press;  

    if (conn != null) 
    { 
     conn.disconnect(); 
    } 

    finish(); 
} 
0

Вы можете переопределить метод onBackPressed() вашей деятельности, чтобы остановить поток загрузки при нажатии на кнопку возврата.

0

Вы можете это сделать.
Во-первых, вы должны переопределить public void onBackPressed() Метод.

 else if (arg0==uploadButton) { 

     dialog = ProgressDialog.show(ContributeToTheSite.this, "", "Uploading file...", true); 
     messageText.setText("uploading started....."); 
     uploadThread = new Thread(new Runnable() { 
      public void run() { 

        uploadFile(imagepath); 

      } 
      }).start(); 

    } 

uploadThread определяет класс или статический для использования в методе onBackPressed.
После этого uploadThread.stop(), где в onBackPressed метод.

public void onBackPressed(){ 
uploadThread.stop(); 
super.onBackPressed(); 
} 

Если этот способ невозможен, попробуйте это.

public class ContributeToTheSite extends Activity implements OnClickListener{ 
private boolean sendingFile = false; 
... 
public void onClick(View arg0) { 
    if(arg0==btnselectpic) 
    { 
     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent, "Complete action using"), 1); 

    } 
    else if (arg0==uploadButton) { 

     dialog = ProgressDialog.show(ContributeToTheSite.this, "", "Uploading file...", true); 
     messageText.setText("uploading started....."); 
     sendingFile = true; 
     new Thread(new Runnable() { 
      public void run() { 

        uploadFile(imagepath); 

      } 
      }).start(); 

    }   

} 

public void onBackPressed(){ 
sendingFile = false; 
super.onBackPressed(); 
} 

public int uploadFile(String sourceFileUri) { 
... 
while (bytesRead > 0 && sendingFile) { 

       dos.write(buffer, 0, bufferSize); 
       bytesAvailable = fileInputStream.available(); 
       bufferSize = Math.min(bytesAvailable, maxBufferSize); 
       bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

       } 
if(!sendingFile){ 
    //to do send message server sending file is canceled. 
    return -1; 
} 
sendingFile = false; 
... 
... 
+0

его не работает, можете ли вы рассказать мне, как его использовать? new in android – user3374790

+0

@ user3374790 показать мой отредактированный ответ. Этот способ отменяет отправку файла, но вы контролируете эту ситуацию на сервере. – Amadas

0

Фактически вы можете прервать текущий поток из следующего метода, определите ниже, чтобы задать вопросы. How to stop threads and handlers in Android
я думаю, что вместо того, чтобы создать нить, вы должны использовать AsyncTask и отменить текущее AsyncTask очень прост в обращении asynctask cancel method java doc

Смежные вопросы