- Forum-Beiträge: 111
18.02.2011, 22:57:40 via Website
18.02.2011 22:57:40 via Website
ich habe eine Gallerie nach Anleitung HelloGallery erstellt.
Die Bilder werden dabei aus Internet geladen, sind ca. 1024x768 groß und haben ca. 400kb groß.
Mein Problem ist, dass die DalvikVM mir einen OutOfMemoryError ausgibt. Und das für die ausführende Aktion mehr als 15MB gebraucht werden.
Ich habe das auch mit einem einzigen Bild versucht und bekomme dabei den gleichen Fehler.
Folgende Meldung wird ausgegeben:
02-18 22:40:38.867: ERROR/dalvikvm-heap(339): 15980544-byte external allocation too large for this process.
02-18 22:40:38.867: ERROR/(339): VM won't let us allocate 15980544 bytes
02-18 22:40:38.867: DEBUG/skia(339): --- decoder->decode returned false
02-18 22:40:38.867: DEBUG/AndroidRuntime(339): Shutting down VM
02-18 22:40:38.877: WARN/dalvikvm(339): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
02-18 22:40:38.877: ERROR/AndroidRuntime(339): Uncaught handler: thread main exiting due to uncaught exception
02-18 22:40:38.887: ERROR/AndroidRuntime(339): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:459)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at android.graphics.drawable.Drawable.createFromStream(Drawable.java:657)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at de.andreaslorenz.app.ImageAdapter.ImageOperations(ImageAdapter.java:68)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at de.andreaslorenz.app.ImageAdapter.setDrawable(ImageAdapter.java:37)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at de.andreaslorenz.app.ImageAdapter.<init>(ImageAdapter.java:28)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at de.andreaslorenz.app.gallery$1.onItemSelected(gallery.java:63)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at android.widget.AdapterView.fireOnSelected(AdapterView.java:864)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at android.widget.AdapterView.access$200(AdapterView.java:42)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:830)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at android.os.Handler.handleCallback(Handler.java:587)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at android.os.Handler.dispatchMessage(Handler.java:92)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at android.os.Looper.loop(Looper.java:123)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at android.app.ActivityThread.main(ActivityThread.java:4363)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at java.lang.reflect.Method.invokeNative(Native Method)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at java.lang.reflect.Method.invoke(Method.java:521)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-18 22:40:38.887: ERROR/AndroidRuntime(339): at dalvik.system.NativeStart.main(Native Method)
Könnte jemand schauen wo der Fehler sein könnte?
Meine ImageAdapter Klasse:
[code]public class ImageAdapter extends BaseAdapter {
private int mGalleryItemBackground;
private Context mContext;
private String[] imageURL;
private Drawable[] mImageDraw;
public ImageAdapter(Context c, String[] url) {
mContext = c;
imageURL = url;
--> Zeile 28: setDrawable();
TypedArray a = c.obtainStyledAttributes(R.styleable.HelloGallery);
mGalleryItemBackground = a.getResourceId(R.styleable.HelloGallery_android_galleryItemBackground, 0);
a.recycle();
}
private void setDrawable(){
mImageDraw = new Drawable[imageURL.length];
for(int i = 0; i < imageURL.length; i++){
--> Zeile 37: mImageDraw[i] = ImageOperations(mContext, imageURL[i], "galleryIMG"+i+".jpg");
}
}
public int getCount() {
return mImageDraw.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
i.setImageDrawable(mImageDraw[position]);
i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
i.setBackgroundResource(mGalleryItemBackground);
return i;
}
private Drawable ImageOperations(Context cont, String url, String saveFilename){
try {
InputStream is = (InputStream) this.fetch(url);
--> Zeile 68: Drawable d = Drawable.createFromStream(is, "src");
is.close();
return d;
} catch (MalformedURLException e){
e.printStackTrace();
return null;
} catch (IOException e){
e.printStackTrace();
return null;
}
}
public Object fetch(String adress) throws MalformedURLException,IOException {
URL url = new URL(adress);
Object content = url.getContent();
return content;
}
}[/code]
Ich habe die App auf einem Galaxy S ausprobiert. Sie läuft zwar aber es kommt ab und an zum "Force Close".
— geändert am 19.02.2011, 05:37:11
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.