java - 无法从 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";
}
关于我在这里做错了什么有什么想法吗?
谢谢!
解决方案
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);
推荐阅读
- typescript - 在 Vercel 上部署下一个 js 应用程序时反应钩子表单 v7 问题
- web - 在 JAAS 身份验证中登录失败后如何重定向到 index.jsp
- mysql - MySql ORDER BY 连接慢,2 个查询快
- mysql - 如何从 Java 连接到 AWS MySQL 数据库?
- python - 需要帮助修复 ValueError:要解包的值太多(预期为 3)
- keycloak - 如何在 Keycloak 上实现自定义社交身份提供者?
- javascript - CORS Spring Boot 和 React 管理员 - React
- symfony - 无法删除文件权限被拒绝清理缓存
- python-3.x - 统一随机播放 Numpy Array 和 pandas 数据帧
- windows - Kubernetes 如何在 wsl2 支持的环境中正确挂载 windows 路径