1

이미지를 만들고 있습니다. 알림.Universal-Image-Loader in Service를 사용하는 방법?

GCM을 사용하여 푸시합니다. 그리고 GCM에서 이미지 URI를 보냅니다.

서비스가 안드로이드 응용 프로그램에서 URI를 가지고있을 때, Universal-Image-Loader가 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",""); 
} 

하지만 코드 흐름이 완료 onLoading 방법 공개 무효가 될 때() , 앱이 사라지고 오류가 표시됩니다.

무엇이 문제입니까?

+0

아마도'loadImageSync (...)'가 더 적합할까요? – NOSTRA

+1

감사합니다! 나는 너, Nostras에 의해이 문제를 정확하게 해결한다. 당신이 만든 거 알아! – LKM

답변

1

버전 1.9.1이 될 때까지는 loadImage() 메소드가 주 스레드에서 호출되어야합니다. 버전 1.9.2 이상부터는이 요구 사항이 만료되었습니다. 어디서나 loadImage()를 호출 할 수 있습니다.