2017-12-08 11 views
0

私のAndroidアプリケーションでは、私は2つのアクティビティがあります:メインと記事。私のアプリケーションはMainで始まります。記事では、サーバーからダウンロードした画像を表示しています。ここで バックプレスでの割り込みUrlConnection

は、サーバからイメージをダウンロードするためのコードです:

public class SyncImage extends AsyncTask<Void, Void, Bitmap> { 
private String url; 
private URLConnection connection; 

public SyncImage(String url) { 
     this.url = url; 
    } 

@Override 
    protected Bitmap doInBackground(Void... voids) { 
     Bitmap img; 
     try { 
      URL source = new URL(url); 
      connection = source.openConnection(); 
      Handler.addUrlConnection(connection); 
      connection.setConnectTimeout(10000); 
      connection.setReadTimeout(10000); 
      connection.connect(); 
      img = BitmapFactory.decodeStream(connection.getInputStream()); 
      return img; 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     return null; 
    } 
} 

記事の活動

私は、ユーザーのプレスバックボタンはすべて、メイン画面に戻る場合は、その欲しい
private void downloadImages(ArrayList<String> images) { 
     for (String image : images) { 
      SyncImage sync = new SyncImage(image); 
      sync.execute(); 
      // Rest of the code 
     } 
    } 

UrlConnectionオブジェクトは、実行をキャンセル/停止する必要があります。

sync.cancel(true)を使用してSyncImageオブジェクトをキャンセルできますが、処理中のURLConnectionオブジェクトではなくAsyncTaskオブジェクトのみが停止します。

したがって、実行中の実行UrlConnectionオブジェクトをキャンセルするにはどうすればいいですか?

+0

あなたはasynctasksの多くを開始します。しかし、それらが順番に実行されるので、1つだけがアクティブになります。だから、あなたはすべてを取り消すことができ、他のものがまだ確立されていないので、ただ1つのURL接続が残るでしょう。 – greenapps

答えて

0

この

@Override 

public void onBackPressed() { 
    connection = null; 
    url = ""; 
    finish(); 
} 
+0

まだ動作していません –

0

を試すには、ConnectionSyncImageクラス変数を作成し、その後、次のように接続を切断しよう:

@Override 
public void onBackPressed() { 
    connection.close(); 
    connection.disconnect(); 
    SyncImages.cancel(true); 
    finish(); 
    } 
+0

申し訳ありませんが、UrlConnectionにはクローズまたは切断メソッドがありません。 –

+0

UrlConnectionの代わりにHttpUrlConnectionを使用する必要があります –

関連する問題