联网查看图片的Demo

原创 2015年07月08日 21:33:06

刚刚学习完Android数据存储和访问做了一个联网查看图片的小案例。

效果图如下:

这里写图片描述

源码下载地址:https://coding.net/u/gxs1225/p/InternetImageView/git

注意:
因为需要联网,所以要在   AndroidManifest.xml 中加上联网的权限,不加会报错的呦!

<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">uses-permission</span> <span class="hljs-attribute">android:name</span>=<span class="hljs-value">"android.permission.INTERNET"</span>/></span></code><ul style="display: block;" class="pre-numbering"><li>1</li></ul>

为什么通过子线程加载图片?

分析:    由于网络连接需要很长的时间,才能返回页面的内容。如果此连接动作直接在主线程,也就是UI线程中处理,
  整个程序处于很长的一个等待状态,这样造成用户体验不好,为了解决这个问题,必须把这个任务放置到单独线程中运行,即建一个子线程,避免阻塞UI线程,这样就不会对主线程有任何影。还加快了图片的加载速度。

步骤1

分析:
  首先需要写一个布局文件,一个ImageView用于存放图片显示的位置,一个EditText用于填写图片的URL地址,一个Button按钮,用于事件处理。

代码如下

刚刚学习完Android数据存储和访问做了一个联网查看图片的小案例。

效果图如下:

这里写图片描述

源码下载地址:https://coding.net/u/gxs1225/p/InternetImageView/git

注意:
因为需要联网,所以要在   AndroidManifest.xml 中加上联网的权限,不加会报错的呦!

<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">uses-permission</span> <span class="hljs-attribute">android:name</span>=<span class="hljs-value">"android.permission.INTERNET"</span>/></span></code><ul style="display: block;" class="pre-numbering"><li>1</li></ul>

为什么通过子线程加载图片?

分析:    由于网络连接需要很长的时间,才能返回页面的内容。如果此连接动作直接在主线程,也就是UI线程中处理,
  整个程序处于很长的一个等待状态,这样造成用户体验不好,为了解决这个问题,必须把这个任务放置到单独线程中运行,即建一个子线程,避免阻塞UI线程,这样就不会对主线程有任何影。还加快了图片的加载速度。

步骤1

分析:
  首先需要写一个布局文件,一个ImageView用于存放图片显示的位置,一个EditText用于填写图片的URL地址,一个Button按钮,用于事件处理。

代码如下:

<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">LinearLayout</span> <span class="hljs-attribute">xmlns:android</span>=<span class="hljs-value">"http://schemas.android.com/apk/res/android"</span>
    <span class="hljs-attribute">xmlns:tools</span>=<span class="hljs-value">"http://schemas.android.com/tools"</span>
    <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"match_parent"</span>
    <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"match_parent"</span>
    <span class="hljs-attribute">android:orientation</span>=<span class="hljs-value">"vertical"</span>
    <span class="hljs-attribute">android:paddingBottom</span>=<span class="hljs-value">"@dimen/activity_vertical_margin"</span>
    <span class="hljs-attribute">android:paddingLeft</span>=<span class="hljs-value">"@dimen/activity_horizontal_margin"</span>
    <span class="hljs-attribute">android:paddingRight</span>=<span class="hljs-value">"@dimen/activity_horizontal_margin"</span>
    <span class="hljs-attribute">android:paddingTop</span>=<span class="hljs-value">"@dimen/activity_vertical_margin"</span>
    <span class="hljs-attribute">tools:context</span>=<span class="hljs-value">".MainActivity"</span> ></span>

    <span class="hljs-tag"><<span class="hljs-title">ImageView
</span>        <span class="hljs-attribute">android:id</span>=<span class="hljs-value">"@+id/ivImage"</span>
        <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"match_parent"</span>
        <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"wrap_content"</span>
        <span class="hljs-attribute">android:layout_gravity</span>=<span class="hljs-value">"center"</span>
        <span class="hljs-attribute">android:layout_weight</span>=<span class="hljs-value">"1"</span> /></span>

    <span class="hljs-tag"><<span class="hljs-title">EditText
</span>        <span class="hljs-attribute">android:id</span>=<span class="hljs-value">"@+id/etImageUrl"</span>
        <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"match_parent"</span>
        <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"wrap_content"</span>
        <span class="hljs-attribute">android:ems</span>=<span class="hljs-value">"10"</span>
        <span class="hljs-attribute">android:hint</span>=<span class="hljs-value">"请输入图片的地址"</span>
        <span class="hljs-attribute">android:text</span>=<span class="hljs-value">"http://avatar.csdn.net/C/9/A/1_yf210yf.jpg"</span> /></span>

    <span class="hljs-tag"><<span class="hljs-title">Button
</span>        <span class="hljs-attribute">android:id</span>=<span class="hljs-value">"@+id/btnView"</span>
        <span class="hljs-attribute">android:layout_width</span>=<span class="hljs-value">"wrap_content"</span>
        <span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">"wrap_content"</span>
        <span class="hljs-attribute">android:layout_gravity</span>=<span class="hljs-value">"center"</span>
        <span class="hljs-attribute">android:background</span>=<span class="hljs-value">"@drawable/button_bg"</span>
        <span class="hljs-attribute">android:onClick</span>=<span class="hljs-value">"viewImage"</span>
        <span class="hljs-attribute">android:text</span>=<span class="hljs-value">"浏览"</span> /></span>

<span class="hljs-tag"></<span class="hljs-title">LinearLayout</span>></span></code>

步骤2

分析:
  在MainActivity.java中创建一个子线程,通过这个子线程来获取图片。
  当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main
  Thread),主线程主要负责处理与UI相关的事件。子线程不能单独处理获UI相关的事件
  ,那么必须借助Handler来更新界面。为此,在界面
Activity中创建一个Handler对象,并在handleMessage()中更新UI。 MainActivity.java

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> com.bzu.gxs;
<span class="hljs-keyword">import</span> java.io.IOException;
<span class="hljs-keyword">import</span> java.io.InputStream;
<span class="hljs-keyword">import</span> java.net.HttpURLConnection;
<span class="hljs-keyword">import</span> java.net.MalformedURLException;
<span class="hljs-keyword">import</span> java.net.URL;
<span class="hljs-keyword">import</span> android.os.Bundle;
<span class="hljs-keyword">import</span> android.os.Handler;
<span class="hljs-keyword">import</span> android.os.Message;
<span class="hljs-keyword">import</span> android.app.Activity;
<span class="hljs-keyword">import</span> android.graphics.Bitmap;
<span class="hljs-keyword">import</span> android.graphics.BitmapFactory;
<span class="hljs-keyword">import</span> android.text.TextUtils;
<span class="hljs-keyword">import</span> android.view.Menu;
<span class="hljs-keyword">import</span> android.view.View;
<span class="hljs-keyword">import</span> android.widget.EditText;
<span class="hljs-keyword">import</span> android.widget.ImageView;
<span class="hljs-keyword">import</span> android.widget.Toast;
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MainActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span>
    <span class="hljs-keyword">private</span> EditText etImageUrl;
    <span class="hljs-keyword">private</span> ImageView ivImage;
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> SHOWIMAGE=<span class="hljs-number">1</span>;
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> SHOWFAIL=<span class="hljs-number">0</span>;
    <span class="hljs-comment">// Handler 处理事件</span>
    <span class="hljs-keyword">private</span> Handler handler=<span class="hljs-keyword">new</span> Handler(){
        <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">handleMessage</span>(android.os.Message msg) {
            <span class="hljs-keyword">switch</span> (msg.what) {
            <span class="hljs-keyword">case</span> SHOWIMAGE:
                Bitmap bitmap=(Bitmap) msg.obj;
                ivImage.setImageBitmap(bitmap);
                <span class="hljs-keyword">break</span>;

            <span class="hljs-keyword">case</span> SHOWFAIL:
                ivImage.setImageResource(R.drawable.button_bg);
                Toast.makeText(MainActivity.<span class="hljs-keyword">this</span>, <span class="hljs-string">"显示图片失败"</span>, Toast.LENGTH_LONG).show();
                <span class="hljs-keyword">break</span>;

            <span class="hljs-keyword">default</span>:
                <span class="hljs-keyword">break</span>;
            }
        };
    };
    <span class="hljs-annotation">@Override</span>
    <span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onCreate</span>(Bundle savedInstanceState) {
        <span class="hljs-keyword">super</span>.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();
        ivImage.setImageResource(R.drawable.button_bg);
    }
    <span class="hljs-comment">// 查找的ID</span>
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">initViews</span>() {
       etImageUrl=(EditText) findViewById(R.id.etImageUrl);
       ivImage=(ImageView) findViewById(R.id.ivImage);
    }

    <span class="hljs-comment">// 按钮点击事件</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">viewImage</span>(View view){
        <span class="hljs-keyword">final</span> String imageUrl=etImageUrl.getText().toString();
        <span class="hljs-keyword">if</span>(TextUtils.isEmpty(imageUrl)){
            Toast.makeText(<span class="hljs-keyword">this</span>, <span class="hljs-string">"图片路径不能为空"</span>, Toast.LENGTH_LONG).show();
        }<span class="hljs-keyword">else</span>{
            <span class="hljs-keyword">new</span> Thread(){
                    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">run</span>() {
                        <span class="hljs-keyword">try</span> {
                            URL url=<span class="hljs-keyword">new</span> URL(imageUrl);
                            HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
                            httpURLConnection.setRequestMethod(<span class="hljs-string">"GET"</span>);
                            httpURLConnection.setConnectTimeout(<span class="hljs-number">5000</span>);
                            <span class="hljs-keyword">int</span> responseCode=httpURLConnection.getResponseCode();
                            <span class="hljs-keyword">if</span>(responseCode==<span class="hljs-number">200</span>){
                                InputStream inputStream=httpURLConnection.getInputStream();
                                Bitmap bitmap=BitmapFactory.decodeStream(inputStream);
                                Message message=<span class="hljs-keyword">new</span> Message();
                                message.what=SHOWIMAGE;
                                message.obj=bitmap;
                                <span class="hljs-comment">//ivImage.setImageBitmap(bitmap);</span>
                                handler.sendMessage(message);
                            }<span class="hljs-keyword">else</span>{
                                Message message=<span class="hljs-keyword">new</span> Message();
                                message.what=SHOWFAIL;
                                handler.sendMessage(message);
                            }
                        } <span class="hljs-keyword">catch</span> (MalformedURLException e) {
                            e.printStackTrace();
                        } <span class="hljs-keyword">catch</span> (IOException e) {
                            e.printStackTrace();
                        }
                }
            }.start();
        }
    }
}
</code>

 

 

联网查看图片的Demo

学习完Android数据存储和访问做了一个联网查看图片的小案例。效果图如下:源码下载地址:https://coding.net/u/gxs1225/p/InternetImageView/git问什么...
  • GXSeveryday
  • GXSeveryday
  • 2015年06月24日 09:46
  • 578

联网查看图片

经过一段时间的学习,通过Android数据存储我做了一个小小的例子 效果图如下: package com.bzu.gxs; import java.io.IOException; import ...
  • qq373117816
  • qq373117816
  • 2015年07月01日 21:44
  • 73

安卓实现联网查看图片

效果图 实现源码: layout
  • ss1600480521
  • ss1600480521
  • 2015年07月01日 14:29
  • 254

Linux查看网络的联机状态

Linux查看网络的联机状态 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ netstat -a^C unix 3 [ ] ...
  • you23hai45
  • you23hai45
  • 2015年03月23日 23:03
  • 1281

简易版音乐播放器(不支持联网)

一直都是在论坛上看别人的贴,自己也想写一些东西帮助别人,但自己无奈懂得不多再加上懒所以直到今天才第一次写东西。 前一段时间想用MFC写了音乐播放器,但是直到写时才发现用许多东西自己也是一知半解,一脸...
  • qq_36294008
  • qq_36294008
  • 2017年04月10日 20:00
  • 156

Linux系统是否能够联网

ifconfig命令是设置或显示网络接口的程序,可以显示出我们机器的网卡信息,可是有些时候最小化安装CentOS等Linux发行版的时候会默认不安装ifconfig等命令,这时候你进入终端,运行ifc...
  • sinat_29384657
  • sinat_29384657
  • 2016年04月14日 16:27
  • 1328

CentOS7判断是否联网

安装完centos 7后,修改了网卡配置文件ifcfg-eno16777736 1.vi编辑该配置文件(/etc/sysconfig/network-scripts/ifcfg-eno16777...
  • baidu_35884654
  • baidu_35884654
  • 2016年08月16日 11:16
  • 4657

linux查看服务器网络状态

查看Linux服务器网络状态 2012-05-09 21:14:20 分类: LINUX 查看Linux服务器网络状态 ifconfig 用来显示所有网络接口的详细情况的,如:...
  • yu132563
  • yu132563
  • 2017年06月08日 21:26
  • 186

linux命令之ifconfig、如何测是否上网

一、ifconfig是查看网卡的信息 ifconfig [Interface] Interface是可选项,如果不加此项,则显示系统中所有网卡的信息。如果添加此选项则显示所指定的网卡信息 ...
  • zanbin169
  • zanbin169
  • 2013年10月19日 11:38
  • 2836

安装完centos无法联网的解决方法

历尽千辛万苦在virtualbox安装好了centos7,习惯性打了一天ifconfig,结果发现命令无效,然后经过一系列的检查发现没有ifconfig这个包, 于是要用yum安装一个ifconfi...
  • qq_33776334
  • qq_33776334
  • 2017年04月19日 17:22
  • 529
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:联网查看图片的Demo
举报原因:
原因补充:

(最多只允许输入30个字)