在AyncTask中解码BLOB作为参数传入BLOB字符串

时间:2015-10-13 11:40:45

标签: java android

目标

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

我做了什么

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

我认为问题是

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

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

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

如果我将所有设置和图像的getter更改为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);
    }
}

1 个答案:

答案 0 :(得分:0)

使用它将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;
}