2015-08-15 5 views
0

Я пытаюсь получить растровое изображение с URL-адреса, отправленного в Picasso в классе, который расширяет AsyncTask. Это выглядит следующим образом:Получить растровое изображение с Picasso ILLEGAL_STATE_EXCEPTION

public class MoviesTask extends AsyncTask<String, Void, String[]> { 

// Target object for Bitmap convert 
private Target loadTarget; 
private Bitmap mBitmap; 
private byte[] img; 

public void getBitmap(String url){ 
    if (loadTarget == null) 
     loadTarget = new Target() { 
      @Override 
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
       mBitmap = bitmap; 
      } 

      @Override 
      public void onBitmapFailed(Drawable errorDrawable) { 

      } 

      @Override 
      public void onPrepareLoad(Drawable placeHolderDrawable) { 

      } 


     }; 
    Picasso.Builder builder = new Picasso.Builder(mContext); 
    builder.listener(new Picasso.Listener() { 
     @Override 
     public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) { 
      exception.printStackTrace(); 
     } 
    }); 

    builder.build().with(mContext).load(url).into(loadTarget); 
} 

Исключение, я получаю: Вызванные: java.lang.IllegalStateException: Метод вызов должен происходить от основного потока.

Не могу понять, в чем проблема с моим кодом, и надеемся, что кто-нибудь сможет мне помочь с этим.

ответ

3

Хорошо, я попытался использовать .get() с Picasso и просто вставить его в Bitmap, и он работает.

Может поможет кому-то еще

public Bitmap getBitmap(String url) throws IOException { 
    Bitmap mBitmap; 
    Picasso.Builder builder = new Picasso.Builder(mContext); 
    builder.listener(new Picasso.Listener() { 
     @Override 
     public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) { 
      exception.printStackTrace(); 
     } 
    }); 

    return mBitmap = builder.build().with(mContext).load(url).get(); 
} 
+0

Сообщения об исключении говорит все, что вам нужно вызвать методы асинхронного Пикасса, чтобы избежать сетевых вызовов на UI потоке. –

+0

На самом деле, совершенно наоборот, исключение говорит о том, что 'in' следует вызывать из потока пользовательского интерфейса. Это странное решение. – Maxim

Смежные вопросы