简单案例——网络图片查看器

功能需求

实现一个网络图片查看器,在页面输入框填入网络图片的地址,点击访问按钮,
可以访问网络并获取图片,并显示在界面上。

主要实现的代码:

使用并修改默认的布局文件(activity_main.xml)

    <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"
        tools:context=".MainActivity"
        android:orientation="vertical">

    <ImageView
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:id="@+id/iv"/>

    <EditText
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:hint=" 请输入地址 "
        android:text="http://g.hiphotos.baidu.com/image/pic/item/6159252dd4
        2a2834d277681659b5c9ea14cebfde.jpg"
        android:id="@+id/et"/>

    <Button
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text=" 获取图片 "
        android:onClick="getImage"/>

使用并编辑默认的 Activity(MainActivity.java)

    public class MainActivity extends Activity {
        private ImageView imageView;
        //创建一个 Handler 对象,用户接收子线程发送的消息,然后更新 UI
        private Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                //将数据强转转化为 Bitmap,然后显示在 ImageView 控件中
                imageView.setImageBitmap((Bitmap) msg.obj);
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView)findViewById(R.id.iv);
    }
    public void getImage(View view) {
        //开启一个子线程 处理网络请求
        new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                //从页面获取 URL 地址
                EditText editText =(EditText)findViewById(R.id.et);
                String path = editText.getText().toString();
                //调用Android API 中的 TextUtils 工具类判断路径是否为
                空
                if (TextUtils.isEmpty(path)) {
                    Looper.prepare();
                    Toast.makeText(MainActivity.this, "请输入URL",0).show();
                    Looper.loop();
                    return;
                }
                URL url = new URL(path);
                //获取 HttpURLConnection 链接对象
                HttpURLConnection connection (HttpURLConnection)url.openConnection();
                //设置请求方法为 GET 方式
                connection.setRequestMethod("GET");
                //设置链接超时时间
                connection.setConnectTimeout(50000);
                //设置输入流读取超时时间
                connection.setReadTimeout(50000);
                //打开链接,发送请求
                connection.connect();
                //判断返回的状态码
                if(connection.getResponseCode()==200){
                //获取输入流对象
                InputStream inputStream =connection.getInputStream();
                //调用 Android API 提供的 BitmapFactory 工具类将字
                节流转化为位图
                Bitmap bitmap =BitmapFactory.decodeStream(inputStream);
                //创建一个新的消息
                Message message = new Message();
                //将数据绑定消息
                message.obj = bitmap;
                //调用 handler 发送消息给主线程
                handler.sendMessage(message);
                }
            } catch (Exception e) {
                e.printStackTrace();
                }
            }
            }).start();
        }
    }

运行上面的工程,效果图如下:输入百度图片的一个网址
http://g.hiphotos.baidu.com/image/pic/item/6159252dd42a2834d277681659b5c9ea14cebfde.jpg

模拟器运行图为:

模拟器运行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值