studio programacion móviles libros libro desarrollo curso con aplicaciones android listview android-listview imageview android-imageview

móviles - manual de programacion android pdf



No se puede cargar una imagen desde la URL (4)

Cargar imágenes a través de Picasso es como decir 123, Ya terminaste

Picasso .with(context) //Context .load("http://i.imgur.com/DvpvklR.png") //Can be Url,File.. .into(imageView)//The ImageView;

Esta es solo la carga normal, puede encontrar más opciones en su Documentación

De acuerdo con tu código

Picasso .with(context) //Context .load("http://matrallune.com/images/imagen_corporativa.jpg") //Can be Url,File.. .into(viewHolder.imagen)//The ImageView;

solo quería reemplazar los códigos de carga de imágenes con el código anterior.

Su adaptador final

public class ThreadAdapter extends BaseAdapter { ArrayList<Threadx> data; LayoutInflater inflater; private Context mContext; public ThreadAdapter(Context mContext, ArrayList<Threadx> data) { super(); inflater = LayoutInflater.from(context); this.data = data; this.mContext = mContext; } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } private static class ViewHolder { TextView tvSubject; TextView tvContent; ImageView imagen; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.list_row_thread, null); viewHolder = new ViewHolder(); viewHolder.tvSubject = (TextView) convertView .findViewById(R.id.tvSubject); viewHolder.tvContent = (TextView) convertView .findViewById(R.id.tvContent); viewHolder.imagen = (ImageView) convertView .findViewById(R.id.image); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } String subject = data.get(position).getSubject(); String content = data.get(position).getContent(); String imagen = data.get(position).getImagen(); viewHolder.tvSubject.setText(subject); viewHolder.tvContent.setText(content); //Loading image Picasso .with(mContext) //Context .load("http://matrallune.com/images/imagen_corporativa.jpg") //Can be Url,File.. .into(viewHolder.imagen)//The ImageView; return convertView; } }

Si está inicializando el adaptador de un Fragmento, debe pasar el contexto como getActivity () o también puede inicializarlo en el onAttach() del fragmento.

Si está inicializando el Adaptador de una Actividad. solo querías pasar this .

Inicializando

de la actividad

ThreadAdapter tAdapter = new ThreadAdapter(this,data);

de Fragement

ThreadAdapter tAdapter = new ThreadAdapter(getActivity(),data);

Intenté cargar una imagen desde las URL pero no funciona. Dos errores diferentes están sucediendo. Cuando coloco una URL que comienza con www, la aplicación no se cierra pero no carga la imagen, solo muestra un espacio en blanco. Pero cuando la URL comienza con http: // la aplicación se cierra.

El código que estoy usando para cargar la imagen es el siguiente:

public class ThreadAdapter extends BaseAdapter { ArrayList<Threadx> data; LayoutInflater inflater; public ThreadAdapter(Context context, ArrayList<Threadx> data) { super(); inflater = LayoutInflater.from(context); this.data = data; } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } private static class ViewHolder { TextView tvSubject; TextView tvContent; ImageView imagen; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.list_row_thread, null); viewHolder = new ViewHolder(); viewHolder.tvSubject = (TextView) convertView .findViewById(R.id.tvSubject); viewHolder.tvContent = (TextView) convertView .findViewById(R.id.tvContent); viewHolder.imagen = (ImageView) convertView .findViewById(R.id.image); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } String subject = data.get(position).getSubject(); String content = data.get(position).getContent(); String imagen = data.get(position).getImagen(); viewHolder.tvSubject.setText(subject); viewHolder.tvContent.setText(content); Bitmap bitmap = null; HttpURLConnection urlConnection = null; try { URL url = new URL("www.matrallune.com/images/imagen_corporativa.jpg"); //bitmap = BitmapFactory.decodeStream((InputStream)new URL("www.matrallune.com/images/imagen_corporativa.jpg").getContent()); //bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream()); urlConnection = (HttpURLConnection) url.openConnection(); InputStream is = urlConnection.getInputStream(); bitmap = BitmapFactory.decodeStream(is); } catch (IOException e) { e.printStackTrace(); } viewHolder.imagen.setImageBitmap(bitmap); return convertView; } }

Probé con diferentes métodos, como puede ver en el código, pero todos tienen los mismos problemas. Mi intención es capturar la URL de la variable "imagen".


Supongo que te falta urlConnection.connect();
Cambia tu código a:

try { URL url = new URL("www.matrallune.com/images/imagen_corporativa.jpg"); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.connect(); InputStream is = urlConnection.getInputStream(); bitmap = BitmapFactory.decodeStream(is); } catch (IOException e) { e.printStackTrace(); }

Aunque no estoy seguro

y como se sugiere en los comentarios, es aconsejable usar una biblioteca como Picasso . Es muy fácil. simplemente integre y cambie el código a:

Picasso.with(context).load(url).into(imgView);

actualización : intente incluir connection.setDoInput(true); setUseCaches(false) connection.setDoInput(true); setUseCaches(false) .



usa esta pregunta >> Cargando bitmap a ImageView desde URL en android

public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { private ImageView imageView; private Bitmap image; public DownloadImageTask(ImageView imageView) { this.imageView = imageView; } protected Bitmap doInBackground(String... urls) { String urldisplay = urls[0]; try { InputStream in = new java.net.URL(urldisplay).openStream(); image = BitmapFactory.decodeStream(in); } catch (Exception e) { image = null; } return image; } @SuppressLint("NewApi") protected void onPostExecute(Bitmap result) { if (result != null) { imageView.setImageBitmap(result); } } }

Ahora llame a su código:

public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { conv`enter code here`ertView = inflater.inflate(R.layout.list_row_thread, null); viewHolder = new ViewHolder(); viewHolder.tvSubject = (TextView) convertView .findViewById(R.id.tvSubject); viewHolder.tvContent = (TextView) convertView .findViewById(R.id.tvContent); viewHolder.imagen = (ImageView) convertView .findViewById(R.id.image); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } String subject = data.get(position).getSubject(); String content = data.get(position).getContent(); String imagen = data.get(position).getImagen(); viewHolder.tvSubject.setText(subject); viewHolder.tvContent.setText(content); new DownloadImageTask(viewHolder.imagen).execute("www.matrallune.com/images/imagen_corporativa.jpg"); return convertView; }