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:
http://stackoverflow.com/questions/16789676/caching-images-and-displaying/16978285#16978285. Überprüfen Sie dieses Beispiel von UIL. könnte helfen – Raghunandan
was ist in Zeile 448 'CollectionDemoActivity.java'? Was ist diese Methode 'Oncreate()' in 'CollectionDemoActivity.java'? – Raghunandan
@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