J'essaie de créer une vue personnalisée Android et je suis confronté à un problème plutôt étrange.Android Custom View: obtenir des références nulles sur tous les membres de la classe dans la méthode onDraw
Chaque membre de données que j'ai défini dans le constructeur (String, Bitmap, ...) devient nul dans la méthode onDraw redéfinie.
Voici le code:
public class SimulationView extends View
{
private static final String TAG = "SIMULATION_VIEW";
private String str;
private Bitmap mField;
public SimulationView(Context context) {
super(context);
str = new String("hello");
mField = BitmapFactory.decodeResource(getResources(), R.drawable.field);
Log.i(TAG_DEBUG, mField.getHeight() + " " + mField.getWidth()); // displays "1518 900" properly
Log.i(TAG, str); // displays "hello" properly
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.i(TAG, str); // throws java.lang.NullPointerException
Log.i(TAG, mField.getHeight() + " " + mField.getWidth()); // throws java.lang.NullPointerException (when previous line is commented of course)
invalidate();
}
public SimulationView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public SimulationView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private void init(Context context) {
}
Voici le stacktrace lorsque la chaîne provoque la NPE:
Process: com.example.simulation_view, PID: 5207
java.lang.NullPointerException: println needs a message
at android.util.Log.println_native(Native Method)
at android.util.Log.i(Log.java:160)
at com.example.simulation_view.SimulationView.onDraw(SimulationView.java:84)
at android.view.View.draw(View.java:15114)
Et voici le stacktrace lorsque le Bitmap provoque la NPE:
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getHeight()' on a null object reference
at com.example.simulation_view.SimulationView.onDraw(SimulationView.java:83)
at android.view.View.draw(View.java:15114)
Qu'est-ce que je fais mal? Toute aide serait grandement appréciée!
un bon jour
Comment créer SimulationView sur le code par constructeur avec Context ou en XML? Ou une fois sur XML et à l'heure dans le code? –