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)
.
Usando Picaso Lib http://square.github.io/picasso/ llame a Picasso.with(context).load("http://imageUrl/image.png").into(imageView);
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;
}