entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Obtener ruta imagen servidor y mostrarla en listview Android

Estoy obteniendo de una BD externa unas noticias y quiero mostrarlas en un ListView.
Estoy haciendo esto:

static class Datos extends AsyncTask<ListView, Void, ArrayAdapter<ConstructorNoticias>>{
        Context contexto;
        ListView list;
        InputStream is;
        ArrayList<ConstructorNoticias> listaNoticias = new ArrayList<ConstructorNoticias>();

        public void cargarContenido(Context contexto){
            this.contexto = contexto;
        }

        @Override
        protected ArrayAdapter<ConstructorNoticias> doInBackground(ListView... params) {
            // TODO Auto-generated method stub
            list = params[0];
            String resultado = "fallo";
            ConstructorNoticias noti;

            HttpClient cliente = new DefaultHttpClient();
            HttpGet peticionGet = new HttpGet("http://www.xxxxcom/app/noticias.php");
            try {
                HttpResponse response = cliente.execute(peticionGet);
                HttpEntity contenido = response.getEntity();
                is = contenido.getContent();
            } catch (ClientProtocolException e) {
                // TODO: handle exception
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            BufferedReader buferlector = new BufferedReader(new InputStreamReader(is));
            StringBuilder sb = new StringBuilder();
            String linea = null;

            try {
                while((linea = buferlector.readLine())!=null){
                    sb.append(linea);
                }
            } catch (IOException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            try {
                is.close();
            } catch (IOException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            resultado = sb.toString();

            try {
                JSONArray arrayJson = new JSONArray(resultado);
                for(int i = 0;i<arrayJson.length();i++) {
                    JSONObject objetoJson = arrayJson.getJSONObject(i);
                    noti = new ConstructorNoticias(objetoJson.getInt("id_noticia"), objetoJson.getString("titulo"), objetoJson.getString("contenido"));
                    listaNoticias.add(noti);
                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }

            ArrayAdapter<ConstructorNoticias> adaptador = new ArrayAdapter<ConstructorNoticias>(contexto, android.R.layout.simple_list_item_1, listaNoticias);

            return adaptador;
        }

        @Override
        protected void onPostExecute(ArrayAdapter<ConstructorNoticias> result){
            list.setAdapter(result);
        }
}

En el método onCreate tengo esto:

listNoticias = (ListView)findViewById(R.id.listadoViewNoticias);

    Datos datos = new Datos();
    datos.cargarContenido(getApplicationContext());
    datos.execute(listNoticias);

Y dentro de la clase de la actividad las variables:

EditText titulo, contenido;
ListView  listNoticias;
JSONArray listadoNoticias;
String data;

De esta forma en el activity_noticias.xml tengo un ListView que mue muestra solamente el título de la Noticia.

Como hago para que obtenga la ruta del campo imagen y me muestre en el ListView dicha imagen que está en el servidor web.
Espero que me hayan entendido lo que quiero hacer. Gracias!

Coflan comentado Sep 7, 2017

podrías ayudarme con algo parecido ? Tengo una app que se encarga de subir imagenes a un servidor, y una BD con tres campos, Titulo-descripción e imagenes, en el campo imagenes se guarda el enlace hacia el servidor, el problema es que necesito hacer una app aparte que solo se encargue de mostrar dichas imagenes con su rescpectivo titulo y descripción, pero no logro hacer que se muestren, solo cargan los campos de texto..de antemano muchas gracias

Peter comentado Sep 7, 2017

@Coflan abre una pregunta nueva por favor. No hay que mezclar diferentes dudas en una misma.

Saludos.

1 Respuesta

4votos

danielreales7 Puntos4690

He conseguido resolverlo, os dejo el código más o menos:

Lo primero que hay que hacer es crear una clase, por ejemplo CustomListViewAdapter:

public class CustomListViewAdapter extends BaseAdapter

{

LayoutInflater inflater;
List<ListViewItem> items;

public CustomListViewAdapter(Activity context, List<ListViewItem> items) {  
    super();

    this.items = items;
    this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override  
public int getCount() {  
    // TODO Auto-generated method stub  
    return items.size();  
}  

@Override  
public Object getItem(int position) {  
    // TODO Auto-generated method stub  
    return null;  
}  

@Override  
public long getItemId(int position) {  
    // TODO Auto-generated method stub  
    return 0;  
}

@Override  
public View getView(final int position, View convertView, ViewGroup parent) {  
    // TODO Auto-generated method stub  
    ListViewItem item = items.get(position);

    View vi=convertView;

    if(convertView==null)
        vi = inflater.inflate(R.layout.item_row, null);

    ImageView imgThumbnail = (ImageView)vi.findViewById(R.id.imgThumbnail);
    TextView txtTitle = (TextView)vi.findViewById(R.id.txtTitle);
    TextView txtSubtitle = (TextView)vi.findViewById(R.id.txtSubTitle);

    imgThumbnail.setImageResource(item.ThumbnailResource);
    txtTitle.setText(item.Title);
    txtSubtitle.setText(item.Subtitle);

    return vi;  
}
}

Después crear la vista de como quieres que se muestren los elementos en el listView, para ello en la carpeta layout crear un archivo llamado item_row.xml en la cual hemos llamado de la clase creada anteriormente.

Y por último donde quieras que se muestre la información en tu activity tenemos que crear una clase:

class ListViewItem {
    public int ThumbnailResource;
    public String Title;
    public String Subtitle;
}

Y en el onCreate hacemos lo siguiente:

ListView lv = (ListView)findViewById(R.id.listadoViewPlantilla);
    List<ListViewItem> items = new ArrayList<Plantilla.ListViewItem>();
    items.add(new ListViewItem(){{
        ThumbnailResource = R.drawable.launcher_icon;
        Title = "Title";
        Subtitle = "Description";
    }});
CustomListViewAdapter adapter = new CustomListViewAdapter(this, items);
    lv.setAdapter(adapter);

Espero que les sirva!

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

  • gonza_drumstick ganó una medalla hace 3 días

    Club de los 100 - Recibió un total de 100 puntos
  • bastify ganó una medalla hace 3 días

    Club de los 100 - Recibió un total de 100 puntos
  • Yesod seleccionó una respuesta hace 5 días

    java.util.NoSuchElementException
  • abrahamLuna ganó una medalla hace 6 días

    Club de los 100 - Recibió un total de 100 puntos
  • flowcou ganó una medalla hace 6 días

    Buena Respuesta - Recibió +1 votos en respuesta
  • AFM93 ganó una medalla hace 6 días

    Club de los 100 - Recibió un total de 100 puntos
  • mirianna ganó una medalla Jun 11

    Club de los 100 - Recibió un total de 100 puntos
  • nicolasxd ganó una medalla Jun 10

    Club de los 100 - Recibió un total de 100 puntos
  • flowcou ganó una medalla Jun 10

    Buena Pregunta - Recibió +1 votos en pregunta
...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta