这个与获得服务器相应源码相近似,只是把源码换成图片。
借助了
Bitmap bitmap=BitmapFactory.decodeStream( inputStream );
ImageView iv_pic对象只需要调用set方法便可以显示图片 iv_pic.setImgBitmap(bitmap);
注意当错误出现时,也需要发消息,区分消息用Message.what
粘上代码:
public class MainActivity extends Activity {
private final int SUCCESS=1;
private final int Error=0;
private ImageView imageView;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView=(ImageView) findViewById(R.id.imgview);
Button bt=(Button) findViewById(R.id.bt);
handler=new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what==SUCCESS){
imageView.setImageBitmap((Bitmap) msg.obj);
}
else{
Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();
}
}
};
bt.setOnClickListener(new OnClickListener(){
File file=new File(getCacheDir(),"tomcat.png");
@Override
public void onClick(View v) {
if(file!=null&&file.length()>0)
{
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
imageView.setImageBitmap(bitmap);
Toast.makeText(MainActivity.this, "调用缓存", Toast.LENGTH_SHORT).show();
return;
}
new Thread(){
@Override
public void run() {
try {
URL url=new URL("http://10.0.2.2:8080/tomcat.png");
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(10000);
int response=connection.getResponseCode();
if(response==200)
{
InputStream input=connection.getInputStream();
FileOutputStream fos=new FileOutputStream(file);
int len=0;
byte[]buff=new byte[1024];
while((len=input.read(buff))>0)
{
fos.write(buff,0,len);
}
fos.close();
input.close();
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
Message message=new Message();
message.obj=bitmap;
message.what=SUCCESS;
handler.sendMessage(message);
}else
{
Message msg=new Message();
msg.obj="服务器忙,获取失败";
msg.what=Error;
handler.sendMessage(msg);
}
} catch (Exception e) {
Message msg=new Message();
msg.obj="服务器忙,获取失败";
msg.what=Error;
handler.sendMessage(msg);
e.printStackTrace();
}
}
}.start();
}
});
}
}
runOnUiThread(Runnable action); 会判断当前线程,若是主线程则直接执行,若不是主线程,则通过handler自动封装好,然后放在主程序里执行。
它是Activity的API
一般这样:(适合于处理较少的情况,逻辑简单的)
runOnUiThread(new Runnable(){
public void run(){ }
});