Android 将位图值转换为Imageview

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从mysql获取图像 并使用asyntask获取它 $B64图像值正在我的android代码中

<?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");
as
json
是一个
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 ...)"}