首页 > 解决方案 > 无法从 PHP Mysql 中检索图像

问题描述

大家好。

我正在尝试编写一个应该从 mysql db 检索 blob 并将其转换为 android 上的 imageview 的 android 应用程序。

我可以成功地将图像加载到网络服务器(XAMPP),将其编码为 blob 并将其存储在 sql 表中。

向大家问好!

公共类请求处理程序{

public String sendGetRequest(String uri) {
    try {
        URL url = new URL(uri);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));

        String result;

        StringBuilder sb = new StringBuilder();

        while((result = bufferedReader.readLine())!=null){
            sb.append(result);
        }

        return sb.toString();
    } catch (Exception e) {
        return null;
    }
}

这里是检索图像的代码:

公共类 ViewImage 扩展 AppCompatActivity 实现 View.OnClickListener{

private RequestHandler requestHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.download);

    RequestHandler rh = new RequestHandler();
    buttonGetImage.setOnClickListener(this); }
private void getImage() {
    String id = editTextId.getText().toString().trim();
    class GetImage extends AsyncTask<String,Void,Bitmap>{

        ProgressDialog loading;
        RequestHandler rh = new RequestHandler();
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(ViewImage.this, "Uok..", null,true,true);

        }

        @Override
        protected void onPostExecute(Bitmap b) {
            super.onPostExecute(b);
            loading.dismiss();
            imageView.setImageBitmap(b);
        }

        @Override
        protected Bitmap doInBackground(String... params) {

            String id = params[0];
            String add = "http://192.168.1.121:8080/getImage.php?id="+id;
            URL url = null;
            Bitmap image = null;
            try {
                url = new URL(add);
                rh.sendGetRequest(add);
                image = BitmapFactory.decodeStream(url.openConnection().getInputStream());

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return image;
        }
    }
    GetImage gi = new GetImage();
    gi.execute(id);
}

@Override
public void onClick(View v) {
    getImage();
}

}

这里的php脚本:

  if($_SERVER['REQUEST_METHOD']=='GET'){
   $id = $_GET['id'];
  $sql = "select * from image where id = '$id'";
  require_once('dbConnect.php'); 

$r = mysqli_query($con,$sql); 

$result = mysqli_fetch_array($r);

header('content-type: image/jpeg'); 

echo base64_decode($result['image']);

 mysqli_close($con);

}else{
echo "Error";
}

关于我在这里做错了什么有什么想法吗?

谢谢!

标签: javaandroidmysqlviewblob

解决方案


As we know that, Image parsing we are using Bitmap, or Base64 Ecodder.

I suggest you to use library like Glide, Picasso this is official library...
You don't have to write so much code.  
Avoid to use Boiler Plate Code in Development.

Picasso

    Picasso.get()
  .load(url)
  .resize(50, 50)
  .centerCrop()
  .into(imageView)


Glide

GlideApp.with(context)
    .load("http://via.placeholder.com/300.png")
    .override(300, 200)
    .into(ivImg);

推荐阅读