在使用UIL之前,Android – ImageLoader必须是init的configuration

我得到了错误:

在使用之前,ImageLoader必须是具有configuration的初始化是来自非法状态exception的错误。

我很努力地显示图像在我的方法把gridview里面的一个片段。 至于我的理解, imageLoader应该首先通过扩展将扩展BaseActivity的类AbsListViewBaseActivity来初始化。

这两个类用于初始化imageLoader 。 我很迷茫的stream量,我在运行时遇到错误,并在两天内与此工作。 我将包括LogCat错误。

我自己的版本

主要类

 import com.nostra13.universalimageloader.core.ImageLoader; import com.folder.folder.AbsListViewBaseActivity; public class CollectionDemoActivity extends FragmentActivity{ assignImageLoader newAssign; static AbsListViewBaseActivity absList; static ImageAdapter m3; Oncreate() { newAssign = assignImageLoader; m3 = ImageAdapter(); ((GridView) absList.listView).setAdapter(m3); } } /** * A dummy fragment representing a section of the app, but that simply displays dummy text. */ public static class DemoObjectFragment extends Fragment { public static final String ARG_OBJECT = "object"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.ac_image_grid, container, false); List<Menu> itemsDatabase = db.getItemsAsArray("items"); List<String> items = new ArrayList<String>(); for (Menu cn : itemsDatabase) { HashMap<String, String> map = new HashMap<String, String>(); items.add(cn.getImagePath().toString()); values2.add(map); } imageUrls = items.toArray(new String[items.size()]); options2 = new DisplayImageOptions.Builder() .showStubImage(R.drawable.ic_stub) .showImageForEmptyUri(R.drawable.ic_empty) .showImageOnFail(R.drawable.ic_error) .cacheInMemory(true) .cacheOnDisc(true) .bitmapConfig(Bitmap.Config.RGB_565) .build(); absList.listView = (GridView)rootView.findViewById(R.id.gridview); ((GridView) absList.listView).setAdapter(m3); absList.listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //startImagePagerActivity(position); //Toast.makeText(getBaseContext(), "Clieckeed", Toast.LENGTH_SHORT).show(); //Log.d("Inside Onclick:", view.toString()); } }); return rootView; } } class ImageAdapter extends BaseAdapter { @Override public int getCount() { return imageUrls.length; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } public View getView(final int position, View convertView, ViewGroup parent) { View view = convertView; final ViewHolder holder; // Assign Values holder.name.setText(values2.get(position).get(TAG_NAME2 ).toString()); holder.price.setText("Price: " + values2.get(position).get(TAG_PRICE2).toString()); holder.br.setStepSize(1); holder.br.setFocusable(false); Log.d("Image Path Value in GridViewdd: ", values2.get(position).get(TAG_IMAGE_NAME2).toString()); newAssign.getImageLoader("Image Path", holder.image, options2); return view; } class ViewHolder { public TextView name; public TextView price; public ImageView image; public RatingBar br; } } static class assignImageLoader extends AbsListViewBaseActivity{ static ImageLoader mg; assignImageLoader() { mg = imageLoader; } public void getImageLoader(String path, ImageView img, DisplayImageOptions options) { imageLoader.displayImage(path, img, options); } } 

scheme的原始实施和stream程

主要类

 public class ImageGridActivity extends AbsListViewBaseActivity { onCreate() { ((GridView) listView).setAdapter(new ImageAdapter()); } public class ImageAdapter extends BaseAdapter { public View getView(final int position, View convertView, ViewGroup parent) { imageLoader.displayImage(path, holder.image, options2); } } } 

AbsListViewBaseActivity

 public class AbsListViewBaseActivity extends BaseActivity { protected static final String STATE_PAUSE_ON_SCROLL = "STATE_PAUSE_ON_SCROLL"; protected static final String STATE_PAUSE_ON_FLING = "STATE_PAUSE_ON_FLING"; public AbsListView listView; protected boolean pauseOnScroll = false; protected boolean pauseOnFling = true; @Override public void onRestoreInstanceState(Bundle savedInstanceState) { pauseOnScroll = savedInstanceState.getBoolean(STATE_PAUSE_ON_SCROLL, false); pauseOnFling = savedInstanceState.getBoolean(STATE_PAUSE_ON_FLING, true); } @Override public void onResume() { super.onResume(); applyScrollListener(); } private void applyScrollListener() { listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling)); } @Override public void onSaveInstanceState(Bundle outState) { outState.putBoolean(STATE_PAUSE_ON_SCROLL, pauseOnScroll); outState.putBoolean(STATE_PAUSE_ON_FLING, pauseOnFling); } @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem pauseOnScrollItem = menu.findItem(R.id.item_pause_on_scroll); pauseOnScrollItem.setVisible(true); pauseOnScrollItem.setChecked(pauseOnScroll); MenuItem pauseOnFlingItem = menu.findItem(R.id.item_pause_on_fling); pauseOnFlingItem.setVisible(true); pauseOnFlingItem.setChecked(pauseOnFling); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item_pause_on_scroll: pauseOnScroll = !pauseOnScroll; item.setChecked(pauseOnScroll); applyScrollListener(); return true; case R.id.item_pause_on_fling: pauseOnFling = !pauseOnFling; item.setChecked(pauseOnFling); applyScrollListener(); return true; default: return super.onOptionsItemSelected(item); } } } 

BaseActivity

 public abstract class BaseActivity extends Activity { public ImageLoader imageLoader = ImageLoader.getInstance(); @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); //Added in the code by me for handling the init error imageLoader.init(ImageLoaderConfiguration.createDefault(getBaseContext())); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item_clear_memory_cache: imageLoader.clearMemoryCache(); return true; case R.id.item_clear_disc_cache: imageLoader.clearDiscCache(); return true; default: imageLoader.destroy(); return false; } } } 

logcat的:

 07-19 11:28:26.909: E/AndroidRuntime(24023): FATAL EXCEPTION: main 07-19 11:28:26.909: E/AndroidRuntime(24023): java.lang.IllegalStateException: ImageLoader must be init with configuration before using 07-19 11:28:26.909: E/AndroidRuntime(24023): at com.nostra13.universalimageloader.core.ImageLoader.checkConfiguration(ImageLoader.java:325) 07-19 11:28:26.909: E/AndroidRuntime(24023): at com.nostra13.universalimageloader.core.ImageLoader.displayImage(ImageLoader.java:170) 07-19 11:28:26.909: E/AndroidRuntime(24023): at com.nostra13.universalimageloader.core.ImageLoader.displayImage(ImageLoader.java:134) 07-19 11:28:26.909: E/AndroidRuntime(24023): at com.jinisys.restoplusordering.CollectionDemoActivity$assignImageLoader.getImageLoader(CollectionDemoActivity.java:448) 07-19 11:28:26.909: E/AndroidRuntime(24023): at com.jinisys.restoplusordering.CollectionDemoActivity$ImageAdapter.getView(CollectionDemoActivity.java:424) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.widget.AbsListView.obtainView(AbsListView.java:2267) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.widget.GridView.onMeasure(GridView.java:1030) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.View.measure(View.java:15181) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.View.measure(View.java:15181) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1447) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.View.measure(View.java:15181) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.View.measure(View.java:15181) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.widget.LinearLayout.measureVertical(LinearLayout.java:833) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.View.measure(View.java:15181) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 07-19 11:28:26.909: E/AndroidRuntime(24023): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1848) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1100) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.Choreographer.doCallbacks(Choreographer.java:555) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.Choreographer.doFrame(Choreographer.java:525) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.os.Handler.handleCallback(Handler.java:615) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.os.Handler.dispatchMessage(Handler.java:92) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.os.Looper.loop(Looper.java:137) 07-19 11:28:26.909: E/AndroidRuntime(24023): at android.app.ActivityThread.main(ActivityThread.java:4745) 07-19 11:28:26.909: E/AndroidRuntime(24023): at java.lang.reflect.Method.invokeNative(Native Method) 07-19 11:28:26.909: E/AndroidRuntime(24023): at java.lang.reflect.Method.invoke(Method.java:511) 07-19 11:28:26.909: E/AndroidRuntime(24023): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 07-19 11:28:26.909: E/AndroidRuntime(24023): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 07-19 11:28:26.909: E/AndroidRuntime(24023): at dalvik.system.NativeStart.main(Native Method) 

基于这个方法:

ImageGallery

Solutions Collecting From Web of "在使用UIL之前,Android – ImageLoader必须是init的configuration"

尝试在你的onCreateView中实现这个:

 BaseActivity.imageLoader.init(ImageLoaderConfiguration.createDefault(getBaseCont‌​ext())); 

我想你正在使用通用图像加载器API。 如果是,那么你忘了在Application类中configuration图像加载器。

在Application类中添加下面的函数:

 public static void initImageLoader(Context context) { // This configuration tuning is custom. You can tune every option, you may tune some of them, // or you can create default configuration by the // ImageLoaderConfiguration.createDefault(this); // method. // ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context); config.threadPriority(Thread.NORM_PRIORITY - 2); config.denyCacheImageMultipleSizesInMemory(); config.diskCacheFileNameGenerator(new Md5FileNameGenerator()); config.diskCacheSize(50 * 1024 * 1024); // 50 MiB config.tasksProcessingOrder(QueueProcessingType.LIFO); config.writeDebugLogs(); // Remove for release app // Initialize ImageLoader with configuration. ImageLoader.getInstance().init(config.build()); } 

有关更多详细信息,请检查此示例 。

这对我更好。

把以下内容放在你的活动的onCreate

  ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(MyActivity.this)); 

只需将以下代码放入BaseActivity或MyApplication类中:

 public ImageLoader getImageLoader() { if (mImageLoader == null) { mImageLoader = ImageLoader.getInstance(); mImageLoader.init(ImageLoaderConfiguration.createDefault(this)); } return this.mImageLoader; } 

然后,每当你想使用图像加载器,然后创build一个新的ImageLoader实例,就像下面这样:

 private ImageLoader imageLoader = MyApplication.getInstance().getImageLoader(); 

或者,如果你采取BaseActivitiy在这里input代码:

 private ImageLoader imageLoader = BaseActivity.getInstance().getImageLoader(); 

首先,通过进入项目属性→Java构buildpath,检查用户imageLoader.jar包是否包含在项目中。

其次,在onCreateView中实现这个代码:BaseActivity.imageLoader.init(ImageLoaderConfiguration.createDefault(getBaseCont ext()));