2013-07-19 7 views
28

habe ich den Fehler:Android - Imageloader muss mit Konfiguration init werden, bevor in UIL mit

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

ich kämpfen, um die Bilder in meinem Ansatz zur Anzeige der Gridview innerhalb eines Bruchstücke setzen. Was mein Verständnis betrifft, sollte die imageLoader zuerst initialisiert werden, indem die Klasse AbsListViewBaseActivity erweitert wird, die BaseActivity erweitert wird.

Diese beiden Klassen werden verwendet, um die imageLoader zu initialisieren. Ich habe den Fluss ziemlich durcheinander gebracht, und ich bekomme Fehler in der Laufzeit und arbeite damit in zwei Tagen. Ich werde LogCat-Fehler einbeziehen.

Meine eigene Version

- Hauptklasse

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

Original-Implementierung und Ablauf des Programms

- Hauptklasse

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) 

Stationierungs von diesem Ansatz:

ImageGallery

+0

http://stackoverflow.com/questions/16789676/caching-images-and-displaying/16978285#16978285. Überprüfen Sie dieses Beispiel von UIL. könnte helfen – Raghunandan

+0

was ist in Zeile 448 'CollectionDemoActivity.java'? Was ist diese Methode 'Oncreate()' in 'CollectionDemoActivity.java'? – Raghunandan

+0

@Raghunandan Ich habe versucht, die Antworten und die Codes zu sehen, aber ich denke, weit entfernt von dem, was ich brauche. Vielleicht besteht meine Notwendigkeit darin, eine weitere Klassenmanipulation zu erweitern, um den gleichen Ablauf vom Original zu erhalten. Nicht sicher, obwohl. Bitte helfen Sie mir mit diesem Herrn. Ich habe mit diesem in zwei Tagen gearbeitet. – rahstame

Antwort

98

Versuchen Sie dies in Ihrem onCreateView implementieren:

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

Vielen Dank für diese tolle Antwort !!! Ich arbeitete ohne Mühe .. :) – rahstame

+0

Froh, zu helfen. Jederzeit. : P – TheLittleNaruto

+0

wo soll ich das umsetzen ?? – Serafins

6

Ich glaube, Sie den Universal-Image Loader API verwenden. Wenn ja, haben Sie vergessen, den Image Loader in der Application-Klasse zu konfigurieren.

die unten Funktion in der Anwendungsklasse:

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

Für weitere Informationen, lesen Sie this sample.

+0

Sir, ich habe Codes oben hinzugefügt Ich hoffe, das könnte helfen. – rahstame

+0

Link funktioniert nicht mehr – TWilly

-1

Prüfen Sie zunächst, dass Benutzer imageLoader.jar Paket ordnungsgemäß in das Projekt einbezogen wird in Projekteigenschaften → Java Build-Pfad gehen.

Zweitens implementieren Sie diesen Code in der onCreateView: BaseActivity.imageLoader.init (ImageLoaderConfiguration.createDefault (getBaseCont ext()));

+0

Was meinst du mit "user imageLoader.jar packet"? –

0

Einfach den folgenden Code in der BaseActivity oder MyApplication Klasse:

public ImageLoader getImageLoader() { 

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

Dann, wenn Sie das Bild Loader verwenden wollen, dann eine neue Instanz von Imageloader erstellen, genau wie die folgenden:

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

Oder wenn Sie nehmen BaseActivitiy Code eingeben hier:

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

Das hat besser für mich funktioniert.

Legen Sie die folgenden in der onCreate Ihrer Tätigkeit

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