安卓学习笔记 网络图片Bitmap

从网络获取图片,并对其转流,保存到本地,并加载出来
比如这张图
图片链接:

https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1530532248868&di=0fccebc2c4911e0520b9b84db949b0b3&imgtype=0&src=http%3A%2F%2Fwww.sdtajg.com%2FimageRepository%2F401a6292-6cf9-4d0f-850a-29fbb08c5271.jpg

直接上代码

public class MainActivity extends Activity {

    private static final String TAG = "HttpClient";

    private ImageView mImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mImageView = (ImageView) findViewById(R.id.image_view);

        file2Bitmap();
    }

    /**
     * 使用HttpClient来进行GET请求
     */
    private void httpClientGet() {

        new Thread() {
            @Override
            public void run() {

                // 基础参数对象
                BasicHttpParams params = new BasicHttpParams();
                // 使用静态方法
                // 设置连接时长
                // 第一个参数:BasicHttpParams对象
                // 第二个参数:设置时间
                HttpConnectionParams.setConnectionTimeout(params, 10000);
                HttpConnectionParams.setSoTimeout(params, 10000);

                // 获得HttpClient对象
                HttpClient client = new DefaultHttpClient(params);

                // 实例化Get请求对象
                HttpGet get = new HttpGet(
                        "http://v.juhe.cn/toutiao/index?type=tiyu&key=5465c4c5d60f72c3d756a9f1a9b8437d");

                try {
                    // 执行get请求,获得返回的数据封装
                    HttpResponse response = client.execute(get);

                    // 判断状态码
                    if (response.getStatusLine().getStatusCode() == 200) {
                        // 获取字节输入流
                        InputStream is = response.getEntity().getContent();
                        // 转换为字符流输入流
                        InputStreamReader isr = new InputStreamReader(is);
                        // 缓冲字符输入流
                        BufferedReader br = new BufferedReader(isr);

                        // JSON数据拼接用的字符串类
                        StringBuffer sb = new StringBuffer();
                        // “水瓢”
                        String buffer = new String();

                        // 循环读取数据
                        while ((buffer = br.readLine()) != null) {
                            // 追加拼接的字符串
                            sb.append(buffer);
                        }
                        // 转换成字符串,打印检测结果是否正常
                        Log.d(TAG, sb.toString());

                        // 关闭输入流
                        br.close();

                    } else {
                        Log.d(TAG, "Error code:" + response.getStatusLine().getStatusCode());
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                    Log.d(TAG, "" + e);
                }

            }
        }.start();

    }

    /**
     * 从网络获取图片的输入流,并且将输入流转换成Bitmap用于UI显示
     */
    private void getInputStreamFromNet() {
        new Thread() {

            public void run() {

                // 基础参数对象
                BasicHttpParams params = new BasicHttpParams();
                // 使用静态方法
                // 设置连接时长
                // 第一个参数:BasicHttpParams对象
                // 第二个参数:设置时间
                HttpConnectionParams.setConnectionTimeout(params, 10000);
                HttpConnectionParams.setSoTimeout(params, 10000);

                // 获得HttpClient对象
                HttpClient client = new DefaultHttpClient(params);

                HttpGet get = new HttpGet(
                        "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1530532248868&di=0fccebc2c4911e0520b9b84db949b0b3&imgtype=0&src=http%3A%2F%2Fwww.sdtajg.com%2FimageRepository%2F401a6292-6cf9-4d0f-850a-29fbb08c5271.jpg");
                try {
                    // 执行get请求,获得返回的数据封装
                    HttpResponse response = client.execute(get);

                    // 判断状态码
                    if (response.getStatusLine().getStatusCode() == 200) {
                        // 获取字节输入流
                        InputStream is = response.getEntity().getContent();
                        // TODO 转Bitmap 或者 文件存储
                        final Bitmap bitmap = BitmapFactory.decodeStream(is);
                        // 显示在控件(主线程)
                        runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                // 主线程要执行的代码
                                mImageView.setImageBitmap(bitmap);
                            }
                        });

                        // 准备一个输出流用于输出Bitmap到文件
                        FileOutputStream fos = new FileOutputStream(getCacheDir() + File.separator + "demo.jpg");
                        // 套缓冲流
                        BufferedOutputStream bos = new BufferedOutputStream(fos);

                        // 将Bitmap缓存成文件
                        // 第一个参数:要压缩的格式
                        // 第二个参数:压缩品质,0是最小文件,100是最高品质
                        //
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);

                        is.close();

                    } else {
                        Log.d(TAG, "Error code:" + response.getStatusLine().getStatusCode());
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                    Log.d(TAG, "" + e);
                }

            }

        }.start();
    }

    /**
     * 从缓存中读取图片为Bitmap,UI显示
     */
    private void file2Bitmap() {

        new Thread() {

            public void run() {

                // 从文件读取到Bitmap,参数为文件路径
                final Bitmap bitmap = BitmapFactory.decodeFile(getCacheDir() + File.separator + "demo.jpg");
                // 通知主线程显示
                runOnUiThread(new Runnable() {
                    public void run() {
                        mImageView.setImageBitmap(bitmap);
                    }
                });

            }

        }.start();

    }

}

猜你喜欢

转载自blog.csdn.net/lewyu521/article/details/80917815