【问题标题】:Display BLOB image from mysql to android using volley使用 volley 将 BLOB 图像从 mysql 显示到 android
【发布时间】:2018-02-11 15:12:25
【问题描述】:

我可以使用此代码将图像上传到 mysql 数据库:

<!doctype html>
<html>
<head>
   <?php

require_once 'include/db-function.php';

if(isset($_POST['upload'])){
    $filename = $_POST['category_name'];
    if (getimagesize ($_FILES['image']['tmp_name'] ) ==FALSE){
        echo failed;
    } else{
    $name =addslashes( $_FILES['image']['name']);
        $image = base64_encode(file_get_contents(addslashes($_FILES["image"]["tmp_name"])));
    saveimage($filename, $image);

    }
    }


function saveimage($filename,$image){
    global $connection;
    $query = "insert into categories(category_name,image) values('$filename','$image')";
    $result = mysqli_query($connection, $query);

    if ($result){
        echo "success";
    }else{
        echo "failed";
    }

}   

?>
<body>
<form method="post" action="" enctype='multipart/form-data'>
<input type='file' name='image' />
Enter image name :<input id="category_name"type="text" name="category_name">
<input  type= "submit" value='Save name' name='upload'>
</form> 
</body>

然后我尝试使用以下内容从数据库中获取数据到 JSON 数组:

<?php require 'include/db-connect.php';

$sql = "select * from categories";
$res = mysqli_query($connection, $sql);

$result = array();

if ($res != false) {
   while ($row = mysqli_fetch_array($res)) {
    array_push($result, array(
            'category_id' => $row['category_id'],
            'category_name' => $row['category_name'],
            'image' => base64_encode($row['image'])
        )
    );
}

echo json_encode(array("result" => $result));
}
mysqli_close($connection);

?>

在 Android 端,这就是我所做的:

private void parseData(String response){
    try{
        JSONObject jsonObject = new JSONObject(response);
        JSONArray result = jsonObject.getJSONArray(Utils.JSON_ARRAY);
        ArrayList<CategoryModel> categories = new ArrayList<>();
        for (int i = 0; i < result.length(); i++) {
            JSONObject data = result.getJSONObject(i);

            CategoryModel categoryModel = new CategoryModel();
            categoryModel.setImage(data.optString ("image"));
            categoryModel.setCategoryName(data.optString("category_name"));
            listCategories.add(categoryModel);

        }

    }
    catch (JSONException e) {
        e.printStackTrace();

    }

    //Finally initializing our adapter
    adapter = new CategoryViewHolder(listCategories, this);
    adapter.setOnItemClickListener(onItemClickListener);

    //Adding adapter to RecycleView
    recyclerView.setAdapter(adapter);
}

并且在 onBindViewHolder 这就是我所拥有的......我真的不知道用什么来设置图像。你也可以在这里帮助我。

 public void onBindViewHolder(CategoryViewHolder.ViewHolder holder, int 
 position) {
    CategoryModel category = categories.get(position);
    String categories = "";


    holder.textView.setText(category.getCategoryName());
    //holder to setImage not sure about this part

}

我能够获取类别名称但无法检索图像。我们将很高兴为您提供帮助。

【问题讨论】:

标签: php android mysql android-volley


【解决方案1】:

您可以尝试使用 Base64.decode 将 base64 字符串转换为字节数组,然后将其转换为位图。并像这样将位图附加到您的 imageView 上。

public void onBindViewHolder(CategoryViewHolder.ViewHolder holder, int 
 position) {
    CategoryModel category = categories.get(position);
    String categories = "";


    holder.textView.setText(category.getCategoryName());
    //convert the image string int bytes like this
    byte[] decodedString = Base64.decode(category.getImage(), Base64.DEFAULT);
    Bitmap imgBitMap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 

    holder.imageView.setImageBitmap(imgBitMap);

}

注意!更多检查this

【讨论】:

  • @SimpleProgrammer 能否分享图片上传、下载和查看 MySQL 的完整源代码。提前致谢
猜你喜欢
  • 2019-06-30
  • 1970-01-01
  • 2015-12-23
  • 2015-05-23
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多