2012-03-16 18 views
0

私はAndroidプログラミングとスレッドには初めてです。リモートサーバーから画像を取得して表示したい(それは今まで働いています^^) 写真はカメラからのものなので、前にダウンロードしたものを見るとすぐに新しいものが必要になります。つまり、スレッドが画像をつかむのを止めるべきではないということです。 (アクティビティが存在する限り)
また、サーバーへの接続を1つ確立してから、HTTP-getを実行するだけです。だから私はスレッドが使用できるパラメータ "接続"を持たなければならない。私はそれがこのようになるはずだと思うあなたはそれのために多少の遅延を設定する必要がありますが、この問題を解決するためにAndroid - 繰り返しスレッドを実行

private class DownloadImageTask extends AsyncTask<URLConnection, Void, Bitmap> { 
    /** The system calls this to perform work in a worker thread and 
     * delivers it the parameters given to AsyncTask.execute() */ 
    private URLConnection connection = null; 
    protected Bitmap doInBackground(URLConnection...connection) { 
     this.connection = connection[0]; 
     return getImageFromServer(connection[0]); 
    } 
    protected void onPostExecute(Bitmap result) { 
     pic.setImageBitmap(result); 
     this.doInBackground(connection); 
    } 
} 

答えて

0

AsyncTaskタスクはいくつかの時点で終了したときのためにあるので、ここでThreadを使用する方がよいかもしれません。以下のようなものがあなたのために働く可能性があります。それとは別に、あなたがローカルService

protected volatile boolean keepRunning = true; 
private Runnable r = new Runnable() { 
    public void run() { 
     // methods are a bit bogus but it should you give an idea. 
     UrlConnection c = createNewUrlConnection(); 
     while (keepRunning) { 
      Bitmap result = getImageFromServer(c); 
      // that probably needs to be wrapped in runOnUiThread() 
      pic.setImageBitmap(result); 
     } 
     c.close(); 
    } 
}; 
private Thread t = null; 

onResume() { 
    keepRunning = true; 
    t = new Thread(r); 
    t.start(); 
} 

onPause() { 
    keepRunning = false; 
    t = null; 
} 
+0

ありがとう、それは私の多くを助けた! – user1271544

+0

もう1つのことは... 'c.close();'はありません 'URLConnection'を閉じるにはどうすればいいですか?私はこれまでに何かを見つけた。 – user1271544

+0

ああ、次に取得するべき 'InputStream'に' .close() 'があるはずです。あなたはいつもあなたが開いたものを閉じるべきです - それが私がクローズを追加した理由です:) – zapl

0

:それはこのような何かを動作するはずです(ただし、明らかにそれはない) - アイデアを得るために

private class DownloadImageTask extends AsyncTask<URLConnection, Void, Bitmap> { 
/** The system calls this to perform work in a worker thread and 
    * delivers it the parameters given to AsyncTask.execute() */ 
private URLConnection connection = null; 
protected Bitmap doInBackground(URLConnection...connection) { 
    this.connection = connection[0]; 
    return getImageFromServer(connection[0]); 
} 
protected void onPostExecute(Bitmap result) { 
    pic.setImageBitmap(result); 
    this.execute("..."); 
} 
} 
+0

こんにちは、私はこのエラーが表示されます:タスクを実行できません。タスクはすでに実行中です。 – user1271544

+0

まずタスクをキャンセルしてみてください。 – goodm

0

非同期タスクは、一度だけ実行することができます使用したほうが良いかもしれない... タスクは、第二の実行が試行された場合は、例外がスローされます(一度だけ実行することができます。 ) この

public void run() { 
    while (true) { 
     //get image... 
    } 
} 
のようなこの..私はあなたが... をダウンロードするサービスを使用したり、スレッドを使用することができれば、それは良いです示唆AsyncTask documentation on AsyncTask のドキュメント...

を見ます

関連する問題