Android 网络图片查看显示的实现方法
效果图如下:
界面中有三个控件,一个EditText,一个Button,一个ImageView
1、下面是具体布局文件
<
EditText
android:id
=
"@+id/picturepagh"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:text
=
"@string/hello_world"
/>
<
Button
android:id
=
"@+id/btn"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:text
=
"查看"
/>
<
ImageButton
android:id
=
"@+id/imageView"
android:layout_width
=
"fill_parent"
android:layout_height
=
"200px"
/>
2、在MainActivity中进行图片图示代码编写
public
class
MainActivity
extends
Activity {
private
Button btn;
private
EditText path;
private
ImageView imgview;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
path = (EditText) findViewById(R.id.picturepagh);
imgview = (ImageView) findViewById(R.id.imageView);
btn.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
Log.i(
"CLICK"
, ((Button) v).getText().toString());
new
Thread(runa).start();
}
});
}
public
void
setView() {
String picturepath = path.getText().toString();
byte
[] data =
null
;
try
{
data = ImageService.getImage(picturepath);
Bitmap bitmap = BitmapFactory.decodeByteArray(data,
0
, data.length);
// BitmapFactory:图片工厂!
Looper.prepare();
// 必须调用此方法,要不然会报错
Message msg =
new
Message();
msg.what =
0
;
msg.obj = bitmap;
handler.sendMessage(msg);
}
catch
(Exception e) {
Toast.makeText(getApplicationContext(),
"获取图片错误"
,
1
).show();
}
}
private
Handler handler =
new
Handler() {
@Override
public
void
handleMessage(Message msg) {
if
(msg.what ==
0
) {
updateImageView((Bitmap) msg.obj);
}
}
};
private
Runnable runa =
new
Runnable() {
@Override
public
void
run() {
setView();
}
};
private
void
updateImageView(Bitmap bm) {
imgview.setImageBitmap(bm);
}
}
3、添加一个ImageService图片服务类,里面包含一个获取网络数据的方法;
public
class
ImageService {
// 获取网络图片的数据
public
static
byte
[] getImage(String picturepath)
throws
Exception {
URL url =
new
URL(picturepath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 基于http协议的连接对象
conn.setConnectTimeout(
10
);
// 10秒;
conn.setRequestMethod(
"GET"
);
// 大写
if
(conn.getResponseCode() ==
200
) {
InputStream ins = conn.getInputStream();
return
StreamTool.read(ins);
}
return
null
;
}
}
4、添加一个流处理工作类StreamTool
public
class
StreamTool {
public
static
byte
[] read(InputStream ins)
throws
Exception {
ByteArrayOutputStream outstream =
new
ByteArrayOutputStream();
byte
[] buffer =
new
byte
[
1024
];
int
length =
0
;
while
((length = ins.read(buffer)) > -
1
) {
outstream.write(buffer,
0
, length);
}
outstream.close();
return
outstream.toByteArray();
}
}
此程序还要不得当的地方,需加以修改