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();
    }
原文地址:https://www.cnblogs.com/fuxw4971/p/14737260.html