私の質問はこのスレッドに関するもの です-アンドロイドでイメージビューを更新する方法
私もソケットを介して画像を取得し、デコードし、画像ビューに設定しようとしています。別の画像が送信され、その後 imageview が再び更新される場合に備えて、ソケットは開いたままにする必要があります。
他のスレッドで彼らがメインスレッドでそれをしないように応答したとき、私はその部分を手に入れませんでした。
メインのアクティビティから、「while (true)」で「立ち往生」する新しいスレッドを開く必要があります。これにより、今後の画像をリッスンし続けることができます。完全な画像が送信されたときは、imageview を更新する必要があります。しかし、イメージビューはメインスレッドにあるため(メインスレッドはUIスレッドと同じですか?)、私にとっては少し問題になり始めています...
誰?
// 追加 - これは私が持っていた asyncTask です -
public class AsyncTask extends AsyncTask<Void, Void, Void> {
private DataInputStream dataInputStream = null;
private ImageView iv = null;
public RobotMapAsyncTask(DataInputStream dataStream, ImageView imageView) {
dataInputStream = dataStream;
iv = imageView;
}
@Override
protected Void doInBackground(Void... params) {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
byte[] byteChunk = new byte[1024];
Bitmap bitmap = null;
int c;
if (dataInputStream != null) {
while (true) {
try {
byteChunk = new byte[1024];
while ((c = dataInputStream.read(byteChunk)) != -1){
buffer.write(byteChunk, 0, c);
}
} catch (IOException e) {
e.printStackTrace();
}
bitmap = BitmapFactory.decodeByteArray(byteChunk, 0, byteChunk.length);
if (bitmap != null) {
//runOnUiThread(new Runnable() {
//public void run() {
//iv.setImageBitmap(bitmap);
//}
// });
}
}
}
return null;
}
しかし、これはアクティビティではないため、明らかにrunOnUiThreadを呼び出すことはできません...