Pregunta

Estoy dando a Picasso una prueba de memoria más fácil con imágenes.Acabo de haber estado tratando de implementarlo dentro de mi fragmento, sin embargo, parece que no puedo hacer que funcione.

mainLayout.setBackground(new BitmapDrawable(getResources(), Picasso.with(mainLayout.getContext()).load(R.drawable.background2).get()));

donde MainLayout es un LineArlayout.También probé esto:

Picasso.with(getActivity().getApplicationContext()).load(R.drawable.background2).into(imageView1);

He intentado Picasso. Con (esto) ... pero esto no funciona en absoluto.

Sigo obteniendo una excepción de:

java.lang.IllegalStateException: Method call should not happen from the main thread.
at com.squareup.picasso.Utils.checkNotMain(Utils.java:71)
at com.squareup.picasso.RequestCreator.get(RequestCreator.java:206)
at ... 

donde lo llamé.

¿Alguien experimenta esto o sabe cómo usarlo correctamente con fragmentos?

¿Fue útil?

Solución

El mensaje de excepción lo indica bastante claro. El mensaje .get () no es Async, por lo tanto, hará el trabajo (red, leer el archivo, ... lo que sea) en el hilo principal, que debe evitar siempre que sea posible.

Su código para configurar la imagen en un ImageView me parece correcto, aunque.

Creo que también es posible hacer lo mismo con el MainLayout (Picasso se configurará automáticamente en el fondo y el mapa de bits. Si me equivoco aquí, eche un vistazo a la clase de destino que viene con Picasso. Puede cargar la imagen en un objetivo, que debe proporcionar a los manipuladores de éxito y error. Dentro del manejador de éxito, obtendrá el mapeo de bits una vez que se carga y pueda configurarlo en su cárnogro.

Hay algunas soluciones, que podrían funcionar en su caso.

[editar]

Cuando se usa el método GET () proporcionado por Picasso, la carga se llevará a cabo en el hilo en el que está trabajando actualmente, que está claramente establecido en las fuentes: https://github.com/square/ Picasso / Blob / Master / Picasso / SRC / PRINCIPAL / JAVA / COM / SCRANCEUP / PICASSO / SOLECCIÓN CREADOR.JAVA

/ ** Cumplir sincrónicamente esta solicitud. No debe llamarse desde el hilo principal. * /

Public BitMap Get () lanza ioException {[...]}

En su caso, usaría la interfaz de destino, que proporciona devoluciones de llamada cuando se carga la imagen.

Picasso.with(getActivity()).load(R.drawable.background2).into(new Target(){

  @Override
  public void onBitmapLoaded(Bitmap bitmap, LoadedFrom from) {
     mainLayout.setBackground(new BitmapDrawable(context.getResources(), bitmap));
  }

  @Override
  public void onBitmapFailed(final Drawable errorDrawable) {
      Log.d("TAG", "FAILED");
  }

  @Override
  public void onPrepareLoad(final Drawable placeHolderDrawable) {
      Log.d("TAG", "Prepare Load");
  }      
});

Como está utilizando un recurso interno aquí, ¿por qué no acaba de hacer lo siguiente?

mainLayout.setBackgroundResource(R.drawable.background2);

Espero que esto ayude.

Saludos

Otros consejos

Pruébalo

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        holder = new ViewHolder();
        v = vi.inflate(Resource, null);
        holder.imageview = (ImageView) v.findViewById(R.id.news_img);
        holder.tvName = (TextView) v.findViewById(R.id.news_title);
        holder.tvDate = (TextView) v.findViewById(R.id.news_time);
        v.setTag(holder);
    } else {
        holder = (ViewHolder) v.getTag();
    }

    holder = (ViewHolder )v.getTag();
    Picasso.with(context).load(postList.get(position).getThumbnail()).into(holder.imageview);
    holder.tvName.setText(postList.get(position).getTitle());
    holder.tvDate.setText(postList.get(position).getDate());

    return v;

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top