网络图片查看器的功能只能在2.3以下的版本中显示,不能再2.3以上的版本上显示,原因是占用主线程的问题
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ImageView
android:layout_weight="1000"
android:id="@+id/iv"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<EditText
android:singleLine="true"
android:text="http://new-img2.ol-img.com/985x695/81/592/li9EvcMvegG2s.jpg"
android:id="@+id/et_path"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="请输入图片路径" />
<Button
android:onClick="click"
android:text="浏览"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
package com.example.webpicture;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
<span style="white-space:pre"> </span>protected static final int CHANGE_UI = 1;
<span style="white-space:pre"> </span>protected static final int Error = 2;
<span style="white-space:pre"> </span>private EditText et_path;
<span style="white-space:pre"> </span>private ImageView iv;
<span style="white-space:pre"> </span>// 主线程创建消息处理器
<span style="white-space:pre"> </span>private Handler handler = new Handler() {
<span style="white-space:pre"> </span>// 接受处理一条消息
<span style="white-space:pre"> </span>public void handleMessage(android.os.Message msg) {
<span style="white-space:pre"> </span>if (msg.what==CHANGE_UI) {
<span style="white-space:pre"> </span>Bitmap bitmap = (Bitmap) msg.obj;
<span style="white-space:pre"> </span>iv.setImageBitmap(bitmap);
<span style="white-space:pre"> </span>}else if(msg.what==Error){
<span style="white-space:pre"> </span>Toast.makeText(MainActivity.this, "错误",1).show();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>};
<span style="white-space:pre"> </span>};
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>protected void onCreate(Bundle savedInstanceState) {
<span style="white-space:pre"> </span>super.onCreate(savedInstanceState);
<span style="white-space:pre"> </span>setContentView(R.layout.activity_main);
<span style="white-space:pre"> </span>et_path = (EditText) this.findViewById(R.id.et_path);
<span style="white-space:pre"> </span>iv = (ImageView) this.findViewById(R.id.iv);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>public void click(View view) {
<span style="white-space:pre"> </span>// 拿到图片的路径
<span style="white-space:pre"> </span>final String path = et_path.getText().toString().trim();
<span style="white-space:pre"> </span>if (TextUtils.isEmpty(path)) {
<span style="white-space:pre"> </span>Toast.makeText(this, "图片的路径为空", 1).show();
<span style="white-space:pre"> </span>} else {
<span style="white-space:pre"> </span>new Thread() {
<span style="white-space:pre"> </span>public void run() {
<span style="white-space:pre"> </span>// 连接服务器采用get请求去获取图片
<span style="white-space:pre"> </span>try {
<span style="white-space:pre"> </span>URL url = new URL(path);
<span style="white-space:pre"> </span>// 根据URL发送一个http的请求
<span style="white-space:pre"> </span>HttpURLConnection cnn = (HttpURLConnection) url
<span style="white-space:pre"> </span>.openConnection();
<span style="white-space:pre"> </span>// 设置请求的方式(get)
<span style="white-space:pre"> </span>cnn.setRequestMethod("GET");
<span style="white-space:pre"> </span>cnn.setConnectTimeout(5000);// 连接服务器请求超时的时间
<span style="white-space:pre"> </span>// cnn.setReadTimeout(5000);// 设置读取服务器请求的时间
<span style="white-space:pre"> </span>// 浏览器的类型、IE浏览器
<span style="white-space:pre"> </span>cnn.setRequestProperty("User-Agent",
<span style="white-space:pre"> </span>"Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko");// 设置请求参数
<span style="white-space:pre"> </span>int code = cnn.getResponseCode();// 得到服务器的响应码
<span style="white-space:pre"> </span>if (code == 200) {
<span style="white-space:pre"> </span>InputStream is = cnn.getInputStream();
<span style="white-space:pre"> </span>Bitmap bitmap = BitmapFactory.decodeStream(is);
//<span style="white-space:pre"> </span>iv.setImageBitmap(bitmap);
<span style="white-space:pre"> </span>//告诉主线程做修改操作
<span style="white-space:pre"> </span>Message msg = new Message();
<span style="white-space:pre"> </span>msg.what = CHANGE_UI;
<span style="white-space:pre"> </span>msg.obj=bitmap;
<span style="white-space:pre"> </span>handler.sendMessage(msg);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>} else {
<span style="white-space:pre"> </span>Message msg = new Message();
<span style="white-space:pre"> </span>msg.what = Error;
<span style="white-space:pre"> </span>handler.sendMessage(msg);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>} catch (Exception e) {
<span style="white-space:pre"> </span>// TODO Auto-generated catch block
<span style="white-space:pre"> </span>e.printStackTrace();
<span style="white-space:pre"> </span>Message msg = new Message();
<span style="white-space:pre"> </span>msg.what = Error;
<span style="white-space:pre"> </span>handler.sendMessage(msg);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}.start();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
}