2017-09-26 2 views
2

Ich habe Probleme mit Suchen (stackoverflow, google) und ich habe noch keine guten Ergebnisse erhalten. Ich habe einen einfachen Downloader in Thread geschrieben. Es (Downloader) lädt meine gewünschte Datei herunter und speichert sie in meinem Android-Telefonspeicher. Jetzt möchte ich den Download mit einer Methode innerhalb meiner Klasse stoppen. Mit anderen Worten möchte ich Downloader Thread stoppen. Folgendes ist mein Code. Wie kann ich das jetzt tun? Bitte führen Sie mich. Freundliche Grüße.Wie man einen Thread in meinem Beispiel stoppt

package com.test; 

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 


public class MainActivity extends Activity { 

    Thread thread; 

    Handler handler = new Handler(); 

    TextView txt; 

    boolean first = true; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button btn = (Button) findViewById(R.id.button1); 
     txt = (TextView) findViewById(R.id.textView1); 

     btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       if (first) { 
        Downloader downloader = new Downloader("http://192.168.43.131/and/filmLow3.mp4"); 
        first = false; 
       } else { 
        if (!thread.currentThread().isInterrupted()) { 
         thread.interrupt(); 
        } 
       } 
      } 
     }); 

    } 


    public class Downloader { 

     int downloaded = 0; 


     public Downloader(final String link) { 

      thread = new Thread(new Runnable() { 

       @Override 
       public void run() { 
        try { 
         URL url = new URL(link); 
         HttpURLConnection connection; 
         connection = (HttpURLConnection) url.openConnection(); 
         connection.connect(); 

         final int size = connection.getContentLength(); 

         InputStream inputStream = connection.getInputStream(); 

         FileOutputStream outputStream = new FileOutputStream(Base.appPath + "file.mp4"); 

         byte[] buffer = new byte[8 * 1024]; 
         int len = 0; 

         while ((len = inputStream.read(buffer)) != -1) { 
          downloaded += len; 
          outputStream.write(buffer, 0, len); 
          handler.post(new Runnable() { 

           @Override 
           public void run() { 
            txt.setText(downloaded/1024/1024 + " MB || " + size/1024/1024 + " MB"); 

           } 
          }); 
         } 
         inputStream.close(); 
         outputStream.close(); 

        } 
        catch (IOException e) { 

         e.printStackTrace(); 
        } 

       } 
      }); 
      thread.start(); 
     } 

    } 
} 
+0

https://stackoverflow.com/questions/19894607/java-how-to-stop-thread https://stackoverflow.com/questions/2491588/how-a-thread-should- close-iss-in-java – XtremeBaumer

+0

Ihr Thread hört nicht auf, wenn die While-Schleife falsch wird? – Arjit

+0

es stoppt. Aber ich möchte es beim Herunterladen und innerhalb der Schleife stoppen. – Hadi

Antwort

3
thread.interrupt(); 

Und Sie haben in der Spinnerei-Code zu überprüfen, ob Thread unterbrochen wurde. Zum Beispiel

if(Thread.currentThread().isInterrupted()) return; 
+0

mein Freund, das geht nicht !! – Hadi

+0

Dies ist die Art, wie Sie den Thread von einem anderen stoppen sollten. Geben Sie den Code mit Ihrer Änderung ein und wir werden sehen, was geändert werden sollte. Beachten Sie auch, dass Sie einen Thread nicht sofort anhalten können. Sie können einfach ein Signal senden, und Thread sollte danach suchen. Manchmal werfen Bibliotheken InterruptedException, aber nicht immer – mlecz

+0

Codeedited. Ich benutze genau den obigen Code, um meinen Thread zu stoppen. – Hadi