java android android-fragments universal-image-loader

java - Android-ImageLoader debe ser init con la configuración antes de usar en UIL



android-fragments universal-image-loader (5)

Creo que estás usando la API del cargador de imágenes universal. En caso afirmativo, olvidó configurar el cargador de imágenes en la clase de la Aplicación.

Agregue la siguiente función en su clase de Aplicación:

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()); }

Para más detalles, verifique esta muestra .

Obtuve el error:

ImageLoader debe ser init con la configuración antes de usar es el error de la excepción de estado ilegal.

Estoy luchando por mostrar las imágenes en mi enfoque de poner la vista de cuadrícula dentro de un fragmento. En cuanto a mi comprensión, el imageLoader debe inicializarse primero extendiendo la clase AbsListViewBaseActivity que extenderá BaseActivity .

Estas dos clases se utilizan para inicializar el imageLoader . Me equivoqué bastante con el flujo, y estoy recibiendo errores en el tiempo de ejecución y he estado trabajando con esto en dos días. Incluiré errores de LogCat.

Mi propia versión

- Clase principal

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); } }

Implementación original y flujo del programa

- Clase principal

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)

Basándose en este enfoque:

ImageGallery


En primer lugar, compruebe que el paquete user imageLoader.jar esté incluido correctamente en el proyecto yendo en las propiedades del proyecto → Ruta de compilación de Java.

En segundo lugar, implemente este código en onCreateView: BaseActivity.imageLoader.init (ImageLoaderConfiguration.createDefault (getBaseCont ext ()));


Esto funcionó mejor para mí.

Pon lo siguiente en el onCreate de tu actividad

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


Intenta implementar esto dentro de tu onCreateView:

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


Simplemente ponga el siguiente código en la clase BaseActivity o MyApplication:

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

Luego, siempre que quiera usar el cargador de imágenes, cree una nueva instancia de ImageLoader, como la siguiente:

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

O si toma BaseActivitiy ingrese el código aquí:

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