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

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

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

Saludos.

1 Respuesta

4votos

danielreales7 Puntos4520

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

...

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

Conecta