网络图片浏览器

来源:互联网 发布:木工画图软件 编辑:程序博客网 时间:2024/05/22 17:24

首先创建案例的布局:

<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"    tools:context=".MainActivity" >    <ImageView        android:id="@+id/iv"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_weight="1" />    <EditText        android:id="@+id/et_path"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:hint="请输入图片路径"        android:text="http://b.hiphotos.baidu.com/image/w%3D310/sign=a439f5b24510b912bfc1f0fff3fdfcb5/83025aafa40f4bfb92c52c5d014f78f0f73618a5.jpg"        android:maxLines="1" />    <Button        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:onClick="click"        android:text="浏览" />下面是编写界面交互:采用HttpClient的GET方式请求获取网络图片资源, 若访问服务器成功则会返回200的状态码,并获取服务器返回的图片数据。通过调用HttpResponse的getEntity()方法获得HttpEntity对象,然后调用HttpEntity的getContent()方法得到输入流,最后通过BitmapFactory生成Bitmap对象,从而将服务器返回的信息转换成图片。

package cn.edu.bzu.imageviewdemo;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {

protected static final int CHANGE_UI = 1;protected static final int ERROR = 2;private EditText et_path;private ImageView iv;// 主线程创建消息处理器private Handler handler = new Handler(){    public void handleMessage(android.os.Message msg) {        if(msg.what == CHANGE_UI){            Bitmap bitmap = (Bitmap) msg.obj;            iv.setImageBitmap(bitmap);        }else if(msg.what == ERROR){            Toast.makeText(MainActivity.this, "显示图片错误",0).show();        }    };};protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    et_path = (EditText) findViewById(R.id.et_path);    iv = (ImageView) findViewById(R.id.iv);}public void click(View view) {    final String path = et_path.getText().toString().trim();    if (TextUtils.isEmpty(path)) {        Toast.makeText(this, "图片路径不能为空", Toast.LENGTH_SHORT).show();    } else {        //子线程请求网络,Android4.0以后访问网络不能放在主线程中        new Thread() {            private HttpURLConnection conn;            private Bitmap bitmap;            public void run() {                // 连接服务器 get 请求 获取图片.                try {                    URL url = new URL(path);       //创建URL对象                    // 根据url 发送 http的请求.                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();                    // 设置请求的方式                    conn.setRequestMethod("GET");                    //设置超时时间                    conn.setConnectTimeout(5000);                    // 得到服务器返回的响应码                    int code = conn.getResponseCode();                    //请求网络成功后返回码是200                    if (code == 200) {                        //获取输入流                        InputStream is = conn.getInputStream();                        //将流转换成Bitmap对象                        Bitmap bitmap = BitmapFactory.decodeStream(is);                        //iv.setImageBitmap(bitmap);                        //TODO: 告诉主线程一个消息:帮我更改界面。内容:bitmap                        Message msg = new Message();                        msg.what = CHANGE_UI;                        msg.obj = bitmap;                        handler.sendMessage(msg);                    } else {                        //返回码不是200  请求服务器失败                        Message msg = new Message();                        msg.what = ERROR;                        handler.sendMessage(msg);                    }                } catch (Exception e) {                    e.printStackTrace();                    Message msg = new Message();                    msg.what = ERROR;                    handler.sendMessage(msg);                }            };        }.start();    }}

}

“`
运行程序,在文本框中任意输入一个网络中图片的地址,例如:http://b.hiphotos.baidu.com/image/w%3D310/sign=a439f5b24510b912bfc1f0fff3fdfcb5/83025aafa40f4bfb92c52c5d014f78f0f73618a5.jpg
这里写图片描述
然后点击“浏览”:
通过浏览地址能够得到相应的图片:
这里写图片描述

原创粉丝点击