Android:如何从远程服务器获取图像

时间:2013-12-21 04:40:26

标签: php android json wamp

我正在开发一款应该从远程服务器获取图片的Android应用。我使用WAMP作为我的服务器,使用PHP作为编程语言。我知道如何使用JSON获取文本数据。

我没有使用blob来存储图像。 图像已存储在服务器上的文件夹中。图像的URL存储在db表中。

我尝试了以下代码片段,我从网上得到了这个,但它没有给出任何错误,也没有显示图片

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://10.0.2.2/sareesProject/returnSareeTypeImageUrls.php");
response = httpClient.execute(httpPost);
entity = response.getEntity();
if(response.getStatusLine().getStatusCode() == 200)
{
    Log.d("Http Response:", response.toString());
    if(entity != null)
    {
        InputStream instream = entity.getContent();
        JSONObject  jsonObj = new JSONObject(convertStreamToString(instream));
        String base64Image = jsonObj.getString("pprs");
        Toast.makeText(getBaseContext(), base64Image, Toast.LENGTH_LONG).show();
        byte[] rawImage = Base64.decode(base64Image, Base64.DEFAULT);
        bmp = BitmapFactory.decodeByteArray(rawImage, 0, rawImage.length);
    }
}
ImageView imageview = (ImageView) findViewById(R.id.flag);
imageview.setImageBitmap(bmp);

以下是我的PHP代码

 <?php
    error_reporting( E_ALL ^ E_NOTICE ^ E_WARNING);
    $con = mysql_connect("localhost","root","") or die("con error");
    mysql_select_db("sareesdb") or die("db select eror");
    $query = mysql_query("select * from noofpiecesinatype");
    if($row = mysql_fetch_assoc($query))
    {
        $response = $row['imageUrl'];
    }
    $response = base64_encode($response);
    echo '{"pprs":'.json_encode($response).'}';
    mysqli_close($con);
    ?>

我用html检查了我的PHP代码(带有编码$ response值)我在那里获取图像,但不是在Android中。

2 个答案:

答案 0 :(得分:2)

我对Php并不擅长,但如果您通过JSON响应返回文件URL,则可以使用以下代码下载文件。

int count;
        try {
            URL url = new URL("http://url of your file");
            URLConnection conection = url.openConnection();
            conection.connect();
            // getting file length
            int lenghtOfFile = conection.getContentLength();

            // input stream to read file - with 8k buffer
            InputStream input = new BufferedInputStream(url.openStream(), 8192);

            // Output stream to write file
            OutputStream output = new FileOutputStream("/sdcard/downloadedfile.jpg");

            byte data[] = new byte[1024];

            long total = 0;

            while ((count = input.read(data)) != -1) {
                total += count;
                // publishing the progress....
                // After this onProgressUpdate will be called
                publishProgress(""+(int)((total*100)/lenghtOfFile));

                // writing data to file
                output.write(data, 0, count);
            }

            // flushing output
            output.flush();

            // closing streams
            output.close();
            input.close();

        } catch (Exception e) {
            Log.e("Error: ", e.getMessage());
        }

##编辑## 下载图像后,您可以从图像路径/输入流创建一个位图,并将其分配给图像视图,如下所示

 BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

Bitmap bmp = BitmapFactory.decodeStream(bufferedInputStream);

Original source

答案 1 :(得分:0)

    try {
        httpClient = new DefaultHttpClient();
        httpPost = new HttpPost("http://10.0.2.2/sareesProject/returnSareeTypeImageUrls.php");
        response = httpClient.execute(httpPost);
        entity = response.getEntity();
        if(response.getStatusLine().getStatusCode() == 200)
        {
            Log.d("Http Response:", response.toString());
            if(entity != null)
            {
                instream = entity.getContent();
                JSONObject  jsonObj = new JSONObject(convertStreamToString(instream));
                bitmapPath = jsonObj.getString("pprs");
            }
        }
         try {
             Toast.makeText(getBaseContext(), "http://10.0.2.2/sareesProject/"+bitmapPath, Toast.LENGTH_SHORT).show();
                URL url = new URL("http://10.0.2.2/sareesProject/"+bitmapPath);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setDoInput(true);
                connection.connect();
                InputStream input = connection.getInputStream();
                Bitmap myBitmap = BitmapFactory.decodeStream(input);
                bmp  = myBitmap;
            } catch (IOException e) {
                e.printStackTrace();
                Toast.makeText(getBaseContext(), e.getMessage(),Toast.LENGTH_SHORT).show();
            }
        if(bmp == null)
        Toast.makeText(getBaseContext(), "null", Toast.LENGTH_SHORT).show();
        ImageView imageview = (ImageView) findViewById(R.id.flag);

        imageview.setImageBitmap(bmp);
    } catch (Exception e) {
        // TODO: handle exception
        Toast.makeText(getBaseContext(),e.getMessage(), Toast.LENGTH_LONG).show();
    }

private static String convertStreamToString(InputStream is) {
    /*
     * To convert the InputStream to String we use the BufferedReader.readLine()
     * method. We iterate until the BufferedReader return null which means
     * there's no more data to read. Each line will appended to a StringBuilder
     * and returned as String.
     */
    //new HomePage().show("in con");
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            //show(line);
            //new HomePage().show("in while");
            //new HomePage().show("l="+line);
            sb.append(line+"\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
       //Toast.makeText(, text, duration)
    } finally {
        try {
            if(reader != null)
            {
                try{reader.close();}
                catch(Exception e){e.printStackTrace();}
            }
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}//end of convertStreamToString

以下是我的PHP代码

<?php
error_reporting( E_ALL ^ E_NOTICE ^ E_WARNING);
$con = mysql_connect("localhost","root","") or die("con error");
mysql_select_db("sareesdb") or die("db select eror");
$query = mysql_query("select * from noofpiecesinatype");
$response = array();
while($row = mysql_fetch_assoc($query))
{
$response[] = $row['imageUrl'];
}
echo json_encode($response);
mysqli_close($con);
?>

// -------------------- 我最后得到了.............

首先,我的服务器文件返回以下内容 { “效绩报告”: “上传/ 22.png”} 从这个我使用JSON提取upload / 22.png 现在bitmapPath包含upload / 22.png

非常感谢失眠症给予建议.............

如果对我来说任何一次投票都有帮助..............