1

I hope you can help me with this error, I'm stuck in this for a few days. I want to show a ImageView from URL in a ListView using SimpleAdapter, but the image are showing in white.

I'm recent starting with android, so, i cant understand a lot about LazyList and other stuff..

How i can implement my code to work with ImageView from URL? Here is my AsyncTask to does all work.

class LoadAllProducts extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(ListAlojamientoFragment.this.getActivity());
        pDialog.setMessage("Cargando Alojamientos... Espere por favor.");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }

    protected String doInBackground(String... args) {
        // Creando parametros
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        // Obteniendo JSON string desde url
        JSONObject json = jParser.makeHttpRequest(url_json, "GET", params);

        try {

            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {

                alojamiento = json.getJSONArray(TAG_ALOJAMIENTO);

                for (int i = 0; i < alojamiento.length(); i++) {
                    JSONObject c = alojamiento.getJSONObject(i);

                    String idAlojamiento = c.getString(TAG_ID);
                    String nombre = c.getString(TAG_NOMBRE);
                    String comuna = c.getString(TAG_COMUNA);
                    String fechaIngreso = c.getString(TAG_FECHA);

                    //Img example
                    String urlImg = "http://www.markpascua.com/wp-content/android.jpg";

                    //AQuery Library
                    aq.id(imageView).image(urlImg, true, true, 1, R.drawable.hotel2_1);

                    HashMap<String, String> map = new HashMap<String, String>();

                    map.put(TAG_IMAGE, urlImg);
                    map.put(TAG_ID, idAlojamiento);
                    map.put(TAG_NOMBRE, nombre);
                    map.put(TAG_FECHA, fechaIngreso);

                    productsList.add(map);
                }
            } else {
                // 
            }
        } catch (JSONException e) {
            pDialog.dismiss();
            e.printStackTrace();

        } catch (NullPointerException e){
            pDialog.dismiss();
            e.printStackTrace();

        }

        return null;
    }

    protected void onPostExecute(String file_url) {

        pDialog.dismiss();

        getActivity().runOnUiThread(new Runnable() {
            public void run() {

                 ListAdapter adapter = new SimpleAdapter(
                        ListAlojamientoFragment.this.getActivity(), productsList,
                        R.layout.lista_items, new String[]{TAG_IMAGE, TAG_NOMBRE,
                        TAG_FECHA, TAG_ID},
                        new int[]{R.id.img_row, R.id.idAlojamiento, R.id.nombre, R.id.idAlojamientoDetalle});

                setListAdapter(adapter);
            }
        });

    }

}

---------[EDIT]---------

I recently solved the problem, if anyone have the same problem, here is the code to download image from url to ListView.

AsynTask to download json.

class getAllHouses extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(ListAlojamientoFragment.this.getActivity());
        pDialog.setMessage("Loading... please wait a second.");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }


    protected String doInBackground(String... args) {

        List<NameValuePair> params = new ArrayList<NameValuePair>();
        JSONObject json = jParser.makeHttpRequest(URL_ALL_HOUSES, "GET", params);

        try {
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {

                alojamiento = json.getJSONArray(TAG_ALOJAMIENTO);

                for (int i = 0; i < alojamiento.length(); i++) {
                    JSONObject c = alojamiento.getJSONObject(i);

                    String idAlojamiento = c.getString(TAG_ID);
                    String nombre = c.getString(TAG_NOMBRE);
                    String comuna = c.getString(TAG_COMUNA);
                    String fechaIngreso = c.getString(TAG_FECHA);
                    latitud = c.getString(TAG_LATITUD);
                    longitud = c.getString(TAG_LONGITUD);

                    //URL image download
                    String urlImg = "http://es.opendomo.org/files/android-logo.png";
                    //String
                    flag = urlImg;

                    HashMap<String, Object> map = new HashMap<String, Object>();

                    map.put("flag", R.drawable.blank);
                    map.put("flag_path", flag);
                    map.put(TAG_ID, idAlojamiento);
                    map.put(TAG_NOMBRE, nombre);
                    map.put(TAG_FECHA, fechaIngreso);
                    map.put(TAG_LATITUD, latitud);
                    map.put(TAG_LONGITUD, longitud);
                    productsList.add(map);

                }
            } else {
                // 
            }

        } catch (JSONException e) {
                pDialog.dismiss();
                e.printStackTrace();

                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {


                        final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
                        alert.setTitle("¡Error!");
                        alert.setMessage("No connections are available");
                        alert.setCancelable(false);
                        alert.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();
                            }
                        });
                        alert.create().show();

                    }
                });

        } catch (NullPointerException e){
            pDialog.dismiss();
            e.printStackTrace();

            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {


                    final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
                    alert.setTitle("¡Error!");
                    alert.setMessage("No connections are available");
                    alert.setCancelable(false);
                    alert.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                    alert.create().show();

                }
            });
        }

        return null;
    }

    protected void onPostExecute(String file_url) {

        pDialog.dismiss();

        getActivity().runOnUiThread(new Runnable() {
            public void run() {

                 SimpleAdapter adapter = new SimpleAdapter(
                        ListAlojamientoFragment.this.getActivity(), productsList,
                        R.layout.lista_items, new String[]{"flag", TAG_NOMBRE,
                        TAG_FECHA, TAG_ID, TAG_LATITUD, TAG_LONGITUD},
                        new int[]{R.id.img_row, R.id.idAlojamiento, R.id.nombre, R.id.idAlojamientoDetalle, R.id.id_latitud, R.id.id_longitud});

                 mListView.setAdapter(adapter);

                for(int i=0;i<adapter.getCount();i++) {
                    HashMap<String, Object> hm = (HashMap<String, Object>) adapter.getItem(i);
                    String imgUrl = (String) hm.get("flag_path");

                    ImageLoaderTask imageLoaderTask = new ImageLoaderTask();

                    HashMap<String, Object> hmDownload = new HashMap<String, Object>();
                    hm.put("flag_path", imgUrl);
                    hm.put("position", i);

                    // Starting ImageLoaderTask to download and populate image in the listview
                    imageLoaderTask.execute(hm);
                }

            }
        });

    }

}

AsynTask To download Images to ListView asynchronous..

private class ImageLoaderTask extends AsyncTask<HashMap<String, Object>, Void, HashMap<String, Object>>{

    @Override
    protected HashMap<String, Object> doInBackground(HashMap<String, Object>... hm) {


        InputStream iStream= null;
        String imgUrl = (String) hm[0].get("flag_path");
        int position = (Integer) hm[0].get("position");

        URL url;
        try {
            url = new URL(imgUrl);

            // Creating an http connection to communicate with url
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

            // Connecting to url
            urlConnection.connect();

            // Reading data from url
            iStream = urlConnection.getInputStream();

            // Getting Caching directory
            File cacheDirectory = getActivity().getBaseContext().getCacheDir();

            // Temporary file to store the downloaded image
            File tmpFile = new File(cacheDirectory.getPath() + "/wpta_"+position+".png");

            // The FileOutputStream to the temporary file
            FileOutputStream fOutStream = new FileOutputStream(tmpFile);

            // Creating a bitmap from the downloaded inputstream
            Bitmap b = BitmapFactory.decodeStream(iStream);

            // Writing the bitmap to the temporary file as png or jpeg file
            b.compress(Bitmap.CompressFormat.JPEG,10, fOutStream);

            // Flush the FileOutputStream
            fOutStream.flush();

            //Close the FileOutputStream
            fOutStream.close();

            // Create a hashmap object to store image path and its position in the listview
            HashMap<String, Object> hmBitmap = new HashMap<String, Object>();

            // Storing the path to the temporary image file
            hmBitmap.put("flag", tmpFile.getPath());

            // Storing the position of the image in the listview
            hmBitmap.put("position", position);


            // Returning the HashMap object containing the image path and position
            return hmBitmap;



        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(HashMap<String, Object> result) {
        // Getting the path to the downloaded image
        String path = (String) result.get("flag");

        // Getting the position of the downloaded image
        int position = (Integer) result.get("position");

        // Getting adapter of the listview
        SimpleAdapter adapter = (SimpleAdapter ) mListView.getAdapter();

        // Getting the hashmap object at the specified position of the listview
        HashMap<String, Object> hm = (HashMap<String, Object>) adapter.getItem(position);

        // Overwriting the existing path in the adapter
        hm.put("flag", path);

        // Noticing listview about the dataset changes
        adapter.notifyDataSetChanged();

    }
}

2 Answers 2

2

Use Picasso or Universal Image Loader

Sign up to request clarification or add additional context in comments.

Comments

2

I recently solved the problem, if anyone have the same problem, here is the code to download image from url to ListView.

AsynTask to download json.

class getAllHouses extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(ListAlojamientoFragment.this.getActivity());
        pDialog.setMessage("Loading... please wait a second.");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }


    protected String doInBackground(String... args) {

        List<NameValuePair> params = new ArrayList<NameValuePair>();
        JSONObject json = jParser.makeHttpRequest(URL_ALL_HOUSES, "GET", params);

        try {
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {

                alojamiento = json.getJSONArray(TAG_ALOJAMIENTO);

                for (int i = 0; i < alojamiento.length(); i++) {
                    JSONObject c = alojamiento.getJSONObject(i);

                    String idAlojamiento = c.getString(TAG_ID);
                    String nombre = c.getString(TAG_NOMBRE);
                    String comuna = c.getString(TAG_COMUNA);
                    String fechaIngreso = c.getString(TAG_FECHA);
                    latitud = c.getString(TAG_LATITUD);
                    longitud = c.getString(TAG_LONGITUD);

                    //URL image download
                    String urlImg = "http://es.opendomo.org/files/android-logo.png";
                    //String
                    flag = urlImg;

                    HashMap<String, Object> map = new HashMap<String, Object>();

                    map.put("flag", R.drawable.blank);
                    map.put("flag_path", flag);
                    map.put(TAG_ID, idAlojamiento);
                    map.put(TAG_NOMBRE, nombre);
                    map.put(TAG_FECHA, fechaIngreso);
                    map.put(TAG_LATITUD, latitud);
                    map.put(TAG_LONGITUD, longitud);
                    productsList.add(map);

                }
            } else {
                // 
            }

        } catch (JSONException e) {
                pDialog.dismiss();
                e.printStackTrace();

                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {


                        final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
                        alert.setTitle("¡Error!");
                        alert.setMessage("No connections are available");
                        alert.setCancelable(false);
                        alert.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();
                            }
                        });
                        alert.create().show();

                    }
                });

        } catch (NullPointerException e){
            pDialog.dismiss();
            e.printStackTrace();

            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {


                    final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
                    alert.setTitle("¡Error!");
                    alert.setMessage("No connections are available");
                    alert.setCancelable(false);
                    alert.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                    alert.create().show();

                }
            });
        }

        return null;
    }

    protected void onPostExecute(String file_url) {

        pDialog.dismiss();

        getActivity().runOnUiThread(new Runnable() {
            public void run() {

                 SimpleAdapter adapter = new SimpleAdapter(
                        ListAlojamientoFragment.this.getActivity(), productsList,
                        R.layout.lista_items, new String[]{"flag", TAG_NOMBRE,
                        TAG_FECHA, TAG_ID, TAG_LATITUD, TAG_LONGITUD},
                        new int[]{R.id.img_row, R.id.idAlojamiento, R.id.nombre, R.id.idAlojamientoDetalle, R.id.id_latitud, R.id.id_longitud});

                 mListView.setAdapter(adapter);

                for(int i=0;i<adapter.getCount();i++) {
                    HashMap<String, Object> hm = (HashMap<String, Object>) adapter.getItem(i);
                    String imgUrl = (String) hm.get("flag_path");

                    ImageLoaderTask imageLoaderTask = new ImageLoaderTask();

                    HashMap<String, Object> hmDownload = new HashMap<String, Object>();
                    hm.put("flag_path", imgUrl);
                    hm.put("position", i);

                    // Starting ImageLoaderTask to download and populate image in the listview
                    imageLoaderTask.execute(hm);
                }

            }
        });

    }

}

AsynTask To download Images to ListView asynchronous..

private class ImageLoaderTask extends AsyncTask<HashMap<String, Object>, Void, HashMap<String, Object>>{

    @Override
    protected HashMap<String, Object> doInBackground(HashMap<String, Object>... hm) {


        InputStream iStream= null;
        String imgUrl = (String) hm[0].get("flag_path");
        int position = (Integer) hm[0].get("position");

        URL url;
        try {
            url = new URL(imgUrl);

            // Creating an http connection to communicate with url
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

            // Connecting to url
            urlConnection.connect();

            // Reading data from url
            iStream = urlConnection.getInputStream();

            // Getting Caching directory
            File cacheDirectory = getActivity().getBaseContext().getCacheDir();

            // Temporary file to store the downloaded image
            File tmpFile = new File(cacheDirectory.getPath() + "/wpta_"+position+".png");

            // The FileOutputStream to the temporary file
            FileOutputStream fOutStream = new FileOutputStream(tmpFile);

            // Creating a bitmap from the downloaded inputstream
            Bitmap b = BitmapFactory.decodeStream(iStream);

            // Writing the bitmap to the temporary file as png or jpeg file
            b.compress(Bitmap.CompressFormat.JPEG,10, fOutStream);

            // Flush the FileOutputStream
            fOutStream.flush();

            //Close the FileOutputStream
            fOutStream.close();

            // Create a hashmap object to store image path and its position in the listview
            HashMap<String, Object> hmBitmap = new HashMap<String, Object>();

            // Storing the path to the temporary image file
            hmBitmap.put("flag", tmpFile.getPath());

            // Storing the position of the image in the listview
            hmBitmap.put("position", position);


            // Returning the HashMap object containing the image path and position
            return hmBitmap;



        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(HashMap<String, Object> result) {
        // Getting the path to the downloaded image
        String path = (String) result.get("flag");

        // Getting the position of the downloaded image
        int position = (Integer) result.get("position");

        // Getting adapter of the listview
        SimpleAdapter adapter = (SimpleAdapter ) mListView.getAdapter();

        // Getting the hashmap object at the specified position of the listview
        HashMap<String, Object> hm = (HashMap<String, Object>) adapter.getItem(position);

        // Overwriting the existing path in the adapter
        hm.put("flag", path);

        // Noticing listview about the dataset changes
        adapter.notifyDataSetChanged();

    }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.