1

我正在製作圖片通知。如何在服務中使用Universal-Image-Loader?

我使用GCM推送。通過GCM,我發送圖像URI。

當服務在Android應用了URI,由環球,圖片,裝載機,我嘗試在URI加載圖像。

但在這種情況下,我得到了一個錯誤:

java.lang.IllegalStateException: ImageLoader.displayImage(...) must be invoked from the main thread or from Looper thread 

這是我服務的代碼如下:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()).build(); 
    ImageLoader imageloader = ImageLoader.getInstance(); 
    //ImageLoader.getInstance().destroy(); 
    imageloader.init(config); 

    imageloader.loadImage(img_url, new SimpleImageLoadingListener() { 

     @Override 
     public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
      notificationWithBigPicture(GcmIntentService.this, PUSH_TITLE, PUSH_CONTENT, R.drawable.ic_stat_gcm, loadedImage, GcmMain.class); 
     } 
    }); 


public void notificationWithBigPicture(Context context, String title, String message, int icon, Bitmap banner, Class<?> activityClass) { 
    Log.i(TAG,"6666"); 

    Intent intent = new Intent(context, activityClass); 
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context) 
    .setSmallIcon(icon) 
    .setTicker(title) 
    .setContentTitle(title) 
    .setContentText(message) 
    .setAutoCancel(true); 

    NotificationCompat.BigPictureStyle style = new NotificationCompat.BigPictureStyle(); 
    //style.setBigContentTitle(title); 
    //style.setSummaryText(message); 
    style.bigPicture(banner); 

    builder.setStyle(style); 
    builder.setContentIntent(pendingIntent); 

    builder.setDefaults(Notification.DEFAULT_VIBRATE); 
    builder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); 
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(NOTIFICATION_ID, builder.build()); 
    Log.v("9999",""); 
} 

但是當碼流進入方法public void onLoading完成() , 應用程序已消失並顯示該錯誤。

什麼問題?

+0

也許'loadImageSync(...)'更適合你嗎? – NOSTRA 2014-11-03 18:28:55

+1

謝謝!我完全由你來解決這個問題,Nostras。我知道你做到了! – LKM 2014-11-03 18:53:06

回答

1

直到版本1.9.1的方法的LoadImage()需要在主線程調用。 從版本1.9.2及更高版本開始,此要求已過期。你可以在任何地方調用loadImage()。