Android 将位图值转换为Imageview
我正在通过php从mysql获取图像 并使用asyntask获取它 $B64图像值正在我的android代码中Android 将位图值转换为Imageview,android,bitmap,imageview,Android,Bitmap,Imageview,我正在通过php从mysql获取图像 并使用asyntask获取它 $B64图像值正在我的android代码中 <?php include("db.php"); include("database.php"); //header("Content-Type: image/jpeg"); $skt=$_REQUEST['clientsocket']; $retrieve = SelectSingleRow("screendb"," clientsocket='$skt'",""
<?php
include("db.php");
include("database.php");
//header("Content-Type: image/jpeg");
$skt=$_REQUEST['clientsocket'];
$retrieve = SelectSingleRow("screendb"," clientsocket='$skt'","");
$val=$retrieve['img'];
$response["img_val"]=$val;
$b64image["base64_image"] = base64_encode($val);
echo json_encode($b64image);
您的AsyncTask
都是乱七八糟的,因此它无法工作
您的doInBackground
没有返回任何内容,因此从未调用您的onPostExecute
,并且返回类型不正确
请尝试使用此选项:
class LoadAllProducts extends AsyncTask<Void, Void, Bitmap> {
private static final String Emp_id = "Emp_id";
Bitmap bitmap;
String strbase64_image;
protected Bitmap doInBackground(Void... args) {
username = "port=1892";
// password=edPassword.getText().toString();
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("clientsocket", username));
// params.add(new BasicNameValuePair("Password", password));
JSONObject json = jParser.makeHttpRequest(url_faculty_login, "GET",
params);
Log.d("base64image_encoded from php ", json.toString());
strbase64_image = json.toString();
bitmap = Base64ToImage(strbase64_image);
return bitmap;
}
private Bitmap Base64ToImage(String base64String) {
byte[] imageAsBytes = Base64.decode(base64String.getBytes(),
Base64.DEFAULT);
Bitmap mybitmap = BitmapFactory.decodeByteArray(imageAsBytes, 0,
imageAsBytes.length);
return mybitmap;
}
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
imageView.setImageBitmap(bitmap);
}
}
class LoadAllProducts扩展异步任务{
私有静态最终字符串Emp_id=“Emp_id”;
位图;
字符串strbase64_图像;
受保护位图doInBackground(无效…参数){
username=“port=1892”;
//password=edPassword.getText().toString();
List params=new ArrayList();
添加(新的BasicNameValuePair(“clientsocket”,用户名));
//添加(新的BasicNameValuePair(“密码”,Password));
JSONObject json=jParser.makeHttpRequest(url\u faculty\u login,“GET”,
参数);
d(“base64image_编码自php”,json.toString());
strbase64_image=json.toString();
位图=Base64ToImage(strbase64_图像);
返回位图;
}
专用位图Base64ToImage(字符串base64String){
byte[]imageAsBytes=Base64.decode(base64String.getBytes(),
Base64(默认);
位图mybitmap=BitmapFactory.decodeByteArray(imageAsBytes,0,
imageAsBytes.length);
返回我的位图;
}
受保护的void onPostExecute(位图结果){
//TODO自动生成的方法存根
设置图像位图(位图);
}
}
在这里,您的doInBackground
返回检索到的位图
,并将其传递到onPostExecute
,后者反过来更新您的图像视图
。无需使用runOnUiThread
,因为postExecute已经在UI线程上运行
strbase64_image=json.toString();
应该是:
strbase64_image=json.getString("base64_image");
asjson
是一个JSONObject
表示为
{"base64_image": "AAAAAAA(... some BASE64 content ...)"}
由于它是由php代码中的关联数组上的json\u encode
创建的,因此php可能会受到sql注入攻击。onPostExecute中的runOnUiThread无效,因为onPostExecute位于ui线程上。错误。问题中的doInBackground返回'null',这是一个问题。调用onPostExecute。您的重新格式化要好得多,但对问题的分析不正确,问题仍然存在。根据我的理解,如果您返回null,而onPostExecute需要字符串,则不会发生任何事情。但我可能在这一点上错了,因为我没有运行他的代码代码>
{"base64_image": "AAAAAAA(... some BASE64 content ...)"}