2013-07-19 10 views
28

ho ottenuto l'errore:Android - ImageLoader deve essere init con una configurazione prima di utilizzare in UIL

ImageLoader must be init with configuration before using is the error from Illegal State Exception.

Ho difficoltà a visualizzare le immagini nel mio approccio di mettere il GridView all'interno di una frammenti. Per quanto ne so, il imageLoader deve essere inizializzato prima estendendo la classe AbsListViewBaseActivity che estenderà BaseActivity.

Queste due classi vengono utilizzate per inizializzare lo imageLoader. Sono piuttosto incasinato con il flusso, e sto ricevendo errori in runtime e ho lavorato con questo in due giorni. Includerò gli errori LogCat.

mia versione

- principale Classe

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

implementazione originale e il flusso del programma

- principale Classe

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) 

Basing da questo approccio:

ImageGallery

+0

http://stackoverflow.com/questions/16789676/caching-images-and-displaying/16978285#16978285. controlla questo esempio di UIL. potrebbe aiutare – Raghunandan

+0

cosa c'è sulla linea 448 'CollectionDemoActivity.java'? Inoltre, cos'è questo metodo 'Oncreate()' in 'CollectionDemoActivity.java'? – Raghunandan

+0

@Raghunandan Ho provato a vedere le risposte e i codici, ma penso che sia lontano da quello che mi serve. Forse il mio bisogno è estendere altre manipolazioni di classe per ottenere lo stesso flusso dall'originale. Non sono sicuro però. Per favore aiutami con questo signore. Ho lavorato con questo in due giorni. – rahstame

risposta

98

cercare di attuare questo all'interno del vostro onCreateView:

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

Grazie per questa ottima risposta !!! Ho lavorato senza problemi .. :) – rahstame

+0

Felice di aiutare. Ogni volta : P – TheLittleNaruto

+0

dove dovrei implementarlo ?? – Serafins

6

penso che si sta utilizzando l'Universale immagine loader API. Se sì, allora hai dimenticato di configurare il caricatore di immagini nella classe Application.

aggiungere la funzione di seguito nella classe di applicazione:

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

Per ulteriori dettagli, controllare this sample.

+0

Signore, ho aggiunto i codici sopra spero che questo possa aiutare. – rahstame

+0

Link non funziona più – TWilly

-1

In primo luogo, verificare che il pacchetto utente imageLoader.jar sia correttamente incluso nel progetto andando in proprietà del progetto → Java percorso di generazione.

In secondo luogo, implementare questo codice in onCreateView: BaseActivity.imageLoader.init (ImageLoaderConfiguration.createDefault (getBaseCont ext()));

+0

Cosa intendi con "pacchetto imageLoader.jar utente"? –

0

Basta inserire il seguente codice nella classe BaseActivity o MyApplication:

public ImageLoader getImageLoader() { 

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

Poi ogni volta che si desidera utilizzare il caricatore di immagini quindi creare una nuova istanza di ImageLoader, proprio come il seguente:

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

O se si prende BaseActivitiy inserire il codice qui:

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

Questo ha funzionato meglio per me.

mettere le seguenti nel onCreate della vostra attività

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