您好,遇到技术问题了,socket接收到的数据 刷新imageView问题

lihan6415151528 2013-06-11 11:02:33
我这个是socket接收到的数据,并打印bitmap里面有数据了,长度,宽度,什么的都能获取到,但是就是不动态刷新imageView,这是为什么呢?



package com.freerdp.afreerdp.presentation;

import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.net.ServerSocket;
import java.net.Socket;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

import com.freerdp.afreerdp.R;

public class SpActivity extends Activity implements OnClickListener {

private ImageView img ;
private Button btn ;
@Override
public void onCreate(Bundle savedInstanceState){

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

img = (ImageView)findViewById(R.id.spms);
btn = (Button)findViewById(R.id.kaishi);

btn.setOnClickListener(this);
}

public void receiveFile(Socket socket) {
System.out.println("rrrrrrrrrrrrrrrrrrr11111111111111111");
DataInputStream dis = null;
ByteArrayOutputStream bytestream = null;
try {
try {
dis = new DataInputStream(socket.getInputStream());

final BitmapDrawable bmpDraw=new BitmapDrawable(socket.getInputStream());
final Bitmap bmp=bmpDraw.getBitmap();
System.out.println("rrrrrrrrrrrrrrrrrr bmp==null??"+(bmp==null));
System.out.println("rrrrrrrrrrrrrrrrrr bmp==getHeight??"+bmp.getHeight());
System.out.println("rrrrrrrrrrrrrrrrrr bmp==getRowBytes??"+bmp.getRowBytes());
System.out.println("rrrrrrrrrrrrr run()....");
SpActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
img.setImageBitmap(bmp);
img.postInvalidate();
}
});

// 如果图片还未回收,先强制回收该图片
if (bmpDraw != null && !bmpDraw.getBitmap().isRecycled()){
bmpDraw.getBitmap().recycle();
}

} finally {
if (bytestream != null)
bytestream.close();
if (dis != null)
dis.close();
if (socket != null)
socket.close();
}
} catch (Exception e) {

}
}

@Override
public void onClick(View arg0) {
if(arg0.getId()==btn.getId()){
try {
final ServerSocket server = new ServerSocket(9999);
Thread th = new Thread(new Runnable() {
public void run() {
while (true) {
try {
System.out.println("rrrrrrrrrrrrrrrrr开始监听...");
Socket socket = server.accept();
System.out.println("rrrrrrrrrrrrrrrrrrrr有链接");
receiveFile(socket);
} catch (Exception e) {
}
}
}
});

th.run(); //启动线程运行
} catch (Exception e) {
e.printStackTrace();
}
}
}

}




打印出来的结果 rrrrrrrrrrrrrrrrrr bmp==getHeight?? 768
但是,imageView就是不刷新,为什么呢
...全文
269 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lionfresh 2014-07-22
  • 打赏
  • 举报
回复
楼主,4.0以后不能在子线程中更新UI了,所以你可以在子线程给UI线程发消息,让UI线程自己更新。
victor_lgw 2014-07-22
  • 打赏
  • 举报
回复
final BitmapDrawable bmpDraw=new BitmapDrawable(socket.getInputStream());参数里加个TRUE试试 final BitmapDrawable bmpDraw=new BitmapDrawable(socket.getInputStream(),true);
huanai2000 2013-06-13
  • 打赏
  • 举报
回复
楼主,结果如何。
  • 打赏
  • 举报
回复
刷新view的操作别放到线程里.
renhuihhh 2013-06-12
  • 打赏
  • 举报
回复
貌似像这种情况就得用surfaceView了

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧