user3113472
user3113472

Reputation: 11

Android: How to get image from remote server

I am developing an Android app that should get an image from remote server. Am using WAMP as my server and PHP as programming language. I know how to get text data using JSON.

Am not using blob to store image. Images have stored in a folder on server. Url of image is stored in db table.

I tried the following snippet, I got this from net but it is not giving any error and also it is not displaying image

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);

The following is my php code

 <?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);
    ?>

I checked my php code with html(with out encoding $response value) am getting image there, but not in Android.

Upvotes: 1

Views: 5994

Answers (2)

user3113472
user3113472

Reputation: 11

    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

The following is my php code

<?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);
?>

//-------------------- Fnally i got it.............

First of all my server file returns the following {"pprs":"upload/22.png"} from this i extracted upload/22.png using JSON Now bitmapPath contains upload/22.png

Thank you very much to insomniac giving suggestions.............

If it is helpful to any one vote for me..............

Upvotes: 0

insomniac
insomniac

Reputation: 11756

I am not good with Php, but if you return the file url via a JSON reponse you can use the following code for downloading the file.

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());
        }

## Edit ## After the Image is downloaded you can create a Bitmap from the Image Path/InputStream and assign it to the Image View like this

 BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

Bitmap bmp = BitmapFactory.decodeStream(bufferedInputStream);

Original source

Upvotes: 2

Related Questions