Android: BitmapFactory.decodeResource null zurückgeben
Ich kann nicht scheinen, um dies herauszufinden. Ich habe 2 java-Klassen mit verschiedenen Eigenschaften, die jede Berufung BitmapFactory.decodeResource um den selben Bild-Ressource, gibt das bitmap, während die anderen den Wert null zurück. Beide Klassen im selben Paket.
Hier ist die Klasse, die arbeitet, ruft es BitmapFactory.decodeResource gibt die bitmap. Ich habe nur den relevanten code.
package advoworks.test;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MainScreen extends SurfaceView implements SurfaceHolder.Callback {
private static final String TAG = MainScreen.class.getSimpleName();
public MainScreen(Context context) {
super(context);
Bitmap bitmap;
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.droid_1);
//adding the callback (this) to the surface holder to intercept events;
getHolder().addCallback(this);
//make the GamePanel focusable so it can handle events
setFocusable(true);
}
}
Hier ist die Klasse, das funktioniert nicht. BitmapFactory.decodeResource gibt einen NULL-Wert im debug. Ich habe nur code, den ich fühlte, war relevant.
package advoworks.test;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.Log;
public class Segment {
private int x;
private int y;
private Bitmap bitmap;
public Segment(int x, int y) {
Log.d(TAG, "Creating Segment");
try {
this.bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.droid_1);
} catch (Exception e) {
Log.d(TAG,"Error is " + e);
}
this.x = x;
this.y = y;
Log.d(TAG, "Created Segment");
}
}
Keine Ahnung, wer?
- sind Sie immer Fehler in der logcat?
- Nein, ich bekomme keine Fehler im logcat 🙁
- Warum u tun müssen, laden Sie die gleiche Ressource zweimal in der gleichen app. Laden Sie es einmal auf und übergeben den Verweis auf alle Orte u es brauchen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
getResources()
ist einContext
Methode der Klasse, und Sie sind nicht mit einem Kontext, der in Ihrem Segment-Klasse. Wie funktioniert es. Rufen SiegetApplicationContext().getResources()
Sollten Sie pass Kontext der
Segment
Konstruktor.getResources()
ist ein Mitglied derContext
Klasse. So context-Objekt benötigt wird, die zum aufrufen dieser Methode.public class Segment extends Application {
<br/>public Segment(int x, int y) {
<br/>try {
<br/>Context context;
<br/>context = getApplicationContext();
<br/>this.bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.droid_1);
<br/>} catch (Exception e) {
<br/>Log.d(TAG,"Error is " + e);
<br/>}
}
Überprüfen Sie die Auflösung des Bildes, wenn es zu groß ist, das BitmapFactory.decodeResource wird nur null (keine Ausnahme)
stellen Sie sicher, dass Ihr Bild nicht im drawable-v24 Ordner, verschieben Sie es auf drawable Ordner.
dieser arbeitete für mich.