设计思路:
输入网络图片的地址,点击浏览按钮可以显示网络中的图片。运用线程来实现。
1.子线程利用handle来发送消息,消息被放在主线程中,looper消息轮询器调用handlemessage方法处理消息。
2. 修改配置文件,开启模拟器的网络访问功能。
注意问题
- 注意各个组件的查找。
- httpURLConnection.setRequestMethod(“GET”)中的“GET”必须大写。
- 在4.0以上版本无法在主线程(UI)线程上运行网络请求应用。需要主线程创建handle。
- 打开网络访问权限。
主要代码:
public class MainActivity extends Activity {
private EditText etUr1;
private ImageView ivNetImageShow;
private static final int SHOWIMGE=1;
private Handler handler =new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case SHOWIMGE:
Bitmap bitmap=(Bitmap)msg.obj;
ivNetImageShow.setImageBitmap(bitmap);
break;
default:
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etUr1=(EditText)findViewById(R.id.etImageUrl);
ivNetImageShow=(ImageView)findViewById(R.id.ivImage);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void viewImage(View view){
final String path=etUr1.getText().toString();
if(TextUtils.isEmpty(path)){
Toast.makeText(this, "图片路径不能为空", Toast.LENGTH_SHORT).show();
}
else{
new Thread(){
public void run(){
try {
URL url = new URL(path);
HttpURLConnection httpURLConnection=(HttpURLConnection)url.openConnection();
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setConnectTimeout(5000);
int responsecode=httpURLConnection.getResponseCode();
if(responsecode==200){
InputStream is=httpURLConnection.getInputStream();
Bitmap bitmap=BitmapFactory.decodeStream(is);
//ivNetImage.setImageBitmap(bitmap);
Message message =new Message();
message.what=SHOWIMGE;
message.obj=bitmap;
handler.sendMessage(message);
}
}
catch (IOException e) {
e.printStackTrace();
}
};
}.start();
}
}
}