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();
        }
  • 相关阅读:
    数据绑定表达式语法(Eval,Bind区别)
    使用博客园的第一件事 自定义主题
    sql2000 跨服务器复制表数据
    使用UpdatePanel 局部刷新出现中文乱码的解决方法!!
    MMC不能打开文件MSC文件
    sql 日期 、时间相关
    loaded AS2 swf call function in AS3 holder
    Rewrite the master page form action attribute in asp.net 2.0
    100万个不重复的8位的随机数
    flash 中实现斜切变型
  • 原文地址:https://www.cnblogs.com/fuxw4971/p/14737260.html
Copyright © 2011-2022 走看看