【问题标题】:Decode BLOB in AyncTask passing in BLOB string as parameter在 AyncTask 中解码 BLOB,将 BLOB 字符串作为参数传递
【发布时间】:2015-10-13 11:40:45
【问题描述】:

目标

我的目标是从我的服务器下载图像。但是,图像作为 blob 字段将存储在数据库中,而不是图像的链接。

我做了什么

我实际上已经下载了这个图像,但是图像的路径已传递,并且该图像是从文件中下载的。但是,我正在尝试编辑我的代码,以便它获取 Blob 字符串(从服务器下载)并加载此图像。下面是我的代码。

我认为问题是什么

我最大的问题是在尝试 我将我的“blob”作为字符串参数。 (这是第 1 个错误吗?) 这是urldisplay。但是,BitmapFactory.decodeStream() 需要一个 InputStream。但如果我将参数从 String 更改为 InputStream。

我收到以下代码错误:无法解析方法(java.lang.string)

 new DownloadImageTask(holder.imageview).execute(ArrayListStudents.get(position).getImage());

如果我将所有设置和图像获取器更改为 InputStream,我会收到错误,我调用 student.setImage(jRealObject.getString("cimage")); 从“GetString”列中获取数据

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];// this parameter once had url of image  

        //but now it has the image bitmap.
        Bitmap cImg1= null;
        try {
            InputStream in =  new java.net.URL(urldisplay).openStream();
            // cImg1= BitmapFactory.decodeStream(in);
            cImg1=urldisplay;//Assign strings to BitMap?
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return cImg1;
    }  

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}

【问题讨论】:

    标签: java android


    【解决方案1】:

    使用它来将您的 BLOB 解码为位图:

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];// this parameter once had url of image  
        Bitmap cImg1= null;
        try {
            byte[] byteArray = DBcursor.getBlob(urldisplay);  
            cImg1 = BitmapFactory.decodeByteArray(byteArray, 0 ,byteArray.length);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return cImg1;
    }
    

    【讨论】:

    • 用这个替换try中的所有东西?我是否也将 blob 的参数保留为字符串?
    • 你的ArrayListStudents.get(position).getImage()返回什么?
    • 我实际上有一个执行 .execute(ArrayListDrivers.get(position).getImage());和 driver.setImage(jRealObject.getString("cimage"));从数据库中返回图像的 blob(如果这是您所要求的)
    • 我要问的是您在ArrayListDrivers.get(position).getImage() 中获得的值?那是BLOB 字符串吗?
    • 试试这个看看发生了什么
    猜你喜欢
    • 2016-12-31
    • 2021-07-28
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 2013-06-28
    • 2021-02-09
    相关资源
    最近更新 更多