android:显示网络图片,并对其缓存

来源:互联网 发布:公寓值得投资吗 知乎 编辑:程序博客网 时间:2024/05/16 09:40

android:显示网络图片,并对其缓存,一下为全部的代码。

注意别忘了在清单文件中添加网络请求权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>


1.布局文件

activity_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:orientation="vertical"    android:layout_width="match_parent" android:layout_height="match_parent"    tools:context="activity.smartdot.com.imageload.MainActivity">    <EditText        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="@string/intent_address"        android:id="@+id/et_intenet_address"        android:text="http://photocdn.sohu.com/20161221/Img476479156.jpg"/>    <Button        android:id="@+id/et_intenet_load"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_below="@id/et_intenet_address"        android:onClick="onClick"        android:text="@string/intent_load"/>    <ScrollView        android:layout_below="@id/et_intenet_load"        android:layout_width="match_parent"        android:layout_height="match_parent">        <ImageView            android:id="@+id/html_source"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            />    </ScrollView></LinearLayout>


2.Activity文件
MainActivity.java
package activity.smartdot.com.imageload;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.util.Base64;import android.view.View;import android.widget.EditText;import android.widget.ImageView;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;public class MainActivity extends AppCompatActivity {    private EditText et_intenet_address;    private ImageView html_source;    /**     * 创建消息管理类     */    private Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what) {                case 100:                    html_source.setImageBitmap((Bitmap)msg.obj);            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);            setContentView(R.layout.activity_main);        et_intenet_address = (EditText) findViewById(R.id.et_intenet_address);        html_source = (ImageView) findViewById(R.id.html_source);    }    public void onClick(View v) {        final String urlString = et_intenet_address.getText().toString().trim();        new Thread() {            @Override            public void run() {                String path = Base64.encodeToString(urlString.getBytes(),Base64.DEFAULT);//文件加密                File file = new File(getCacheDir(),path);                //判断是否存在该文件,如果存在则读取缓存,存在则进行网络下载                if(file.exists() && file.length()>0) {                    Bitmap bitmap =BitmapFactory.decodeFile(file.getAbsolutePath());                    Message msg = Message.obtain();                    msg.obj = bitmap;                    msg.what = 100;                    handler.sendMessage(msg);                    return ;                }                URL url = null;                try {                    url = new URL(urlString);                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();                    conn.setRequestMethod("GET");                    conn.setConnectTimeout(5000);//设置网络请求时间                    int code = conn.getResponseCode();                    if(code == 200) {                        InputStream is = conn.getInputStream();                        //getCacheDir获取缓存路径                        FileOutputStream fos = new FileOutputStream(file);                        int len = -1;                        byte[] buffer = new byte[1024];                        while((len = is.read(buffer)) != -1) {                            fos.write(buffer);                        }                        fos.close();                        is.close();                        //通过BitmapFactory工厂创建Bitmap位图对象                        Bitmap bitmap =BitmapFactory.decodeFile(file.getAbsolutePath());                        Message msg = Message.obtain();                        msg.obj = bitmap;                        msg.what = 100;                        //发送消息                        handler.sendMessage(msg);                    }                } catch (java.io.IOException e) {                    e.printStackTrace();                }            }        }.start();    }}



0 0
原创粉丝点击