2015-03-19 38 views
0

我正在关注this tutorial。我正在尝试创建一个简单的图像浏览器。本教程后面的示例项目工作正常。但是,当我尝试在我的项目中使用相同的代码时,我正在获取ImageLoader未初始化的错误。使用ImageLoader时出错,称其未初始化

详细的logcat

03-19 13:30:02.290: E/AndroidRuntime(7716): FATAL EXCEPTION: main 
03-19 13:30:02.290: E/AndroidRuntime(7716): java.lang.IllegalStateException: ImageLoader must be init with configuration before using 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at com.nostra13.universalimageloader.core.ImageLoader.checkConfiguration(ImageLoader.java:340) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at com.nostra13.universalimageloader.core.ImageLoader.displayImage(ImageLoader.java:179) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at com.specialspots.specialspots.ImageSlideAdapter.instantiateItem(ImageSlideAdapter.java:84) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at com.specialspots.specialspots.ImageSlideAdapter.instantiateItem(ImageSlideAdapter.java:1) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:832) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at android.support.v4.view.ViewPager.populate(ViewPager.java:982) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at android.support.v4.view.ViewPager.populate(ViewPager.java:914) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:442) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at com.specialspots.specialspots.HomeFragment$RequestImgTask.onPostExecute(HomeFragment.java:278) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at com.specialspots.specialspots.HomeFragment$RequestImgTask.onPostExecute(HomeFragment.java:1) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at android.os.AsyncTask.finish(AsyncTask.java:631) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at android.os.Looper.loop(Looper.java:176) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at android.app.ActivityThread.main(ActivityThread.java:5419) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at java.lang.reflect.Method.invoke(Method.java:525) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
03-19 13:30:02.290: E/AndroidRuntime(7716):  at dalvik.system.NativeStart.main(Native Method) 

我无能,为什么将它未初始化,但相同的代码示例应用程序工作正常。

的负责错误适配器:

public class ImageSlideAdapter extends PagerAdapter { 
    ImageLoader imageLoader = ImageLoader.getInstance(); 
    DisplayImageOptions options; 
    private ImageLoadingListener imageListener; 
    FragmentActivity activity; 
    List<Product> products; 
    HomeFragment homeFragment; 

    public ImageSlideAdapter(FragmentActivity activity, List<Product> products, 
      HomeFragment homeFragment) { 
     this.activity = activity; 
     this.homeFragment = homeFragment; 
     this.products = products; 
     options = new DisplayImageOptions.Builder() 
       .showImageOnFail(R.drawable.ic_error) 
       .showStubImage(R.drawable.ic_launcher) 
       .showImageForEmptyUri(R.drawable.ic_empty).cacheInMemory() 
       .cacheOnDisc().build(); 

     imageListener = new ImageDisplayListener(); 
    } 

    @Override 
    public int getCount() { 
     return products.size(); 
    } 

    @Override 
    public View instantiateItem(ViewGroup container, final int position) { 
     LayoutInflater inflater = (LayoutInflater) activity 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     View view = inflater.inflate(R.layout.vp_image, container, false); 

     ImageView mImageView = (ImageView) view 
       .findViewById(R.id.image_display); 
     mImageView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Bundle arguments = new Bundle(); 
       Fragment fragment = null; 
       Log.d("position adapter", "" + position); 
       Product product = (Product) products.get(position); 
       arguments.putParcelable("singleProduct", product); 

       // Start a new fragment 
       fragment = new ProductDetailFragment(); 
       fragment.setArguments(arguments); 

       FragmentTransaction transaction = activity 
         .getSupportFragmentManager().beginTransaction(); 
       transaction.replace(R.id.content_frame, fragment, 
         ProductDetailFragment.ARG_ITEM_ID); 
       transaction.addToBackStack(ProductDetailFragment.ARG_ITEM_ID); 
       transaction.commit(); 
      } 
     }); 
     imageLoader.displayImage(
       ((Product) products.get(position)).getImageUrl(), mImageView, 
       options, imageListener); 
     container.addView(view); 
     return view; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((View) object); 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == object; 
    } 

    private static class ImageDisplayListener extends 
      SimpleImageLoadingListener { 

     static final List<String> displayedImages = Collections 
       .synchronizedList(new LinkedList<String>()); 

     @Override 
     public void onLoadingComplete(String imageUri, View view, 
       Bitmap loadedImage) { 
      if (loadedImage != null) { 
       ImageView imageView = (ImageView) view; 
       boolean firstDisplay = !displayedImages.contains(imageUri); 
       if (firstDisplay) { 
        FadeInBitmapDisplayer.animate(imageView, 500); 
        displayedImages.add(imageUri); 
       } 
      } 
     } 
    } 
} 

请告诉我在哪里,我错了。应该做些什么才能使之合适?

回答

1

您必须在Application类中初始化ImageLoader。

public class MyApplication extends Application { 


    public static void initImageLoader(Context context) { 

     File cacheDirectory = StorageUtils.getOwnCacheDirectory(context, ApplicationConstant.IMAGE_CACHE_DIRECTORY); 
     ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).threadPriority(Thread.NORM_PRIORITY - 2) 
                        .threadPoolSize(5) 
                        .denyCacheImageMultipleSizesInMemory() 
                        .diskCacheFileNameGenerator(new Md5FileNameGenerator()) 
                        .memoryCacheSize(50 * 1024 * 1024) 
                        .diskCache(new UnlimitedDiscCache(cacheDirectory)) 
                        .tasksProcessingOrder(QueueProcessingType.LIFO) 
                        .writeDebugLogs() 
                        .build(); 
     // Initialize ImageLoader with configuration. 
     ImageLoader.getInstance().init(config); 

    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     initImageLoader(getApplicationContext()); 
    } 
} 

后,必须设置你的应用程序类在清单中的应用程序标签

<application 
     android:name="MyApplication" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name"> 
</application> 
+0

应用类?我在哪里找到它? – kittu88 2015-03-19 08:09:38

+0

@ kittu88检查我的更新答案。 – mustafasevgi 2015-03-19 08:14:21

+1

谢谢你!有效! – kittu88 2015-03-19 08:15:54

相关问题