zoukankan      html  css  js  c++  java
  • 2021 5 6 团队博客

    解决照片下载浏览功能,将照片通过oss对象下载到流对象,将流对象转换为bitmap对象,将bitmap显示带imageview中。

    需要注意的是:照片的下载 尽量在子线程中完成,bitmap的显示也尽量在子线程中完成,如果将bitmap作为参数传递会显示不全。

    除此之外,对image的设置不能在子线程中,需要

     MainActivity.this.runOnUiThread

    函数:

     public void update()
        {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    final ImageView image = findViewById(R.id.image);
                    OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider(ACCESS_ID, ACCESS_KEY);
                    ClientConfiguration conf = new ClientConfiguration();
                    conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
                    conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
                    conf.setMaxConcurrentRequest(8); // 最大并发请求数,默认5个
                    conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
                    // oss为全局变量,OSS_ENDPOINT是一个OSS区域地址
                    oss = new OSSClient(getApplicationContext(), OSS_ENDPOINT, credentialProvider, conf);
                    //构造下载文件请求
                    //objectKey等同于objectName,表示从OSS下载文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg
                    GetObjectRequest get = new GetObjectRequest("sean1246", "???");
                    //设置下载进度回调
                    get.setProgressListener(new OSSProgressCallback<GetObjectRequest>() {
                        @Override
                        public void onProgress(GetObjectRequest request, long currentSize, long totalSize) {
                            OSSLog.logDebug("getobj_progress:" + currentSize + "total_size:" + totalSize, false);
                        }
                    });
                    try {
                        // 同步执行下载请求,返回结果
                        GetObjectResult getResult = oss.getObject(get);
                        Log.d("Content-Length是", "" + getResult.getContentLength());
                        // 获取文件输入流
                        InputStream inputStream = getResult.getObjectContent();
                        bitmap= BitmapFactory.decodeStream(inputStream);
                        bitmap=zoomImg(bitmap,600,600);
                        MainActivity.this.runOnUiThread(new Runnable() {
                            public void run() {
                            image.setImageBitmap(bitmap);
                            }
                        });
                        ObjectMetadata metadata = getResult.getMetadata();
                        Log.d("ContentType", metadata.getContentType());
                    } catch (ClientException e) {
                        // 本地异常如网络异常等
                        e.printStackTrace();
                    } catch (ServiceException e) {
                        // 服务异常
                        Log.e("RequestId", e.getRequestId());
                        Log.e("ErrorCode", e.getErrorCode());
                        Log.e("HostId", e.getHostId());
                        Log.e("RawMessage", e.getRawMessage());
                    }
                }
            }).start();
        }
  • 相关阅读:
    第17章 标准库特殊设施
    第16章 模板与泛型编程
    String、StringBuffer、StringBuilder的区别
    Mycat分库分表 读写分离 主从切换
    nginx的配置与使用
    kafka的使用
    zookeeper的使用
    mysql数据库优化
    mysql数据库事务详细剖析
    new Thread的弊端及Java四种线程池的使用
  • 原文地址:https://www.cnblogs.com/fuxw4971/p/14737260.html
Copyright © 2011-2022 走看看