2011-09-21 18 views
8

Parece que no puedo resolver esto. Tengo 2 clases de Java con diferentes características, cada una llamando a BitmapFactory.decodeResource para obtener el mismo recurso de imagen, una devuelve el mapa de bits mientras que la otra devuelve null. Ambas clases están en el mismo paquete.Android: BitmapFactory.decodeResource devolviendo nulo

Aquí está la clase que funciona, llama BitmapFactory.decodeResource que devuelve el mapa de bits. Solo he incluido código relevante.

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

} 
} 

Esta es la clase que no funciona. BitmapFactory.decodeResource devuelve un NULL en depuración. Solo he incluido el código que sentí que era relevante.

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

Cualquier pista, ¿alguien?

+0

¿Usted está consiguiendo los errores en el Logcat? – blessenm

+0

no, no recibo ningún error en logcat :( – Kevin

+0

¿Por qué necesita cargar el mismo recurso dos veces en la misma aplicación? Cargarlo una vez y pasar su referencia a todos los lugares que lo necesite. – Ronnie

Respuesta

3

getResources() es un método de clase Context y no está utilizando un contexto en su clase de segmento. Como funciona. Debe llamar al getApplicationContext().getResources()

Debe pasar el contexto al constructor Segment.

public Segment(Context context, int x, int y) { 
    .... 
    bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.droid_1); 
    .... 
} 
+0

Gracias por la respuesta, podría usted explica lo que quiere decir con un "método de clase de contexto"? No puedo encontrar una definición en google – Kevin

+0

'getResources()' es un miembro de la clase 'Context'. Por lo tanto, se necesita un objeto de contexto para llamar a ese método. – Ronnie

+0

¿por qué getResources no da como resultado un error de compilación? De todos modos, he intentado hacer esto: – Kevin

3

Comprobar la resolución de la imagen, si es demasiado grande, la BitmapFactory.decodeResource acaba de regresar nula (sin excepción)

Cuestiones relacionadas