2 votes

Pourquoi est-ce que j'obtiens une nullpointerexception lors de l'ajout d'un linearlayout (Android) ?

J'essaie d'utiliser une classe qui étend la vue pour ajouter un canevas, puis l'ajouter à une disposition linéaire en bas de l'écran, sous des boutons. Je sais que je ne fais pas les choses correctement, mais je n'arrive pas à comprendre ce qui ne va pas. J'obtiens une nullpointerexception lorsque j'essaie d'ajouter la disposition linéaire. Des conseils ?

Voici une partie du code :

public class Vectors extends Activity{

VectorsView vectorsView;
LinearLayout l;

public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    vectorsView = new VectorsView(this);
    l = (LinearLayout) findViewById(R.id.llCanvasV);
    l.addView(vectorsView); //Line 50
    setContentView(R.layout.vectors);
    .......
}

public class VectorsView extends View{

    public VectorsView(Context context) {
        super(context);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);       

        Paint paint = new Paint();
        paint.setColor(Color.WHITE);

        canvas.drawLine(0, 0, 100, 100, paint);
        vectorsView.draw(canvas);
        vectorsView.setLayoutParams(new LayoutParams(25, 25)); 
    }
}

}

Et voici une partie du xml :

<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"
     android:background="@drawable/background" 
     android:orientation="vertical">

     <ImageView android:layout_height="wrap_content" 
        android:src="@drawable/vectors" 
        android:layout_width="wrap_content"
        android:layout_gravity="center"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:adjustViewBounds="true">
     </ImageView>
     <LinearLayout android:layout_height="wrap_content" 
        android:layout_width="match_parent"
        android:orientation="horizontal">
        <Button android:text="Choose Program" 
            android:id="@+id/bChsProgV" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="97dp"
            android:adjustViewBounds="true">
        </Button>
        <ImageButton android:layout_height="wrap_content" 
            android:src="@drawable/help" 
            android:id="@+id/ibHelpV" 
            android:layout_width="wrap_content"
            android:layout_marginLeft="65dp"
            android:background="@null" 
            android:layout_marginTop="10dp">
        </ImageButton>
     </LinearLayout>
     <LinearLayout android:id="@+id/llCanvasV" 
        android:layout_height="wrap_content" 
        android:layout_width="match_parent">
     </LinearLayout>
</LinearLayout>

Et voici le logcat :

 04-12 07:47:22.009: ERROR/AndroidRuntime(15072): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.prattia.webs.cheaterphysics/com.prattia.webs.cheaterphysics.Vectors}: java.lang.NullPointerException
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at android.os.Looper.loop(Looper.java:123)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at android.app.ActivityThread.main(ActivityThread.java:4627)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at java.lang.reflect.Method.invokeNative(Native Method)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at java.lang.reflect.Method.invoke(Method.java:521)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at dalvik.system.NativeStart.main(Native Method)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072): Caused by: java.lang.NullPointerException
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at com.prattia.webs.cheaterphysics.Vectors.onCreate(Vectors.java:50)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-12 07:47:22.009: ERROR/AndroidRuntime(15072):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

7voto

waqaslam Points 31012

Vous devez appeler setContentView avant d'appeler findViewById . Voir ci-dessous :

public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.vectors);  //must be called before findViewById

    vectorsView = new VectorsView(this);
    l = (LinearLayout) findViewById(R.id.llCanvasV);
    l.addView(vectorsView); //Line 50
}

1voto

Nanne Points 35880

Erreur courante :

l = (LinearLayout) findViewById(R.id.llCanvasV);

Recherche dans le contentview actuel, mais celui-ci n'est pas défini.

Changez ;

l = (LinearLayout) findViewById(R.id.llCanvasV);
l.addView(vectorsView); //Line 50
setContentView(R.layout.vectors);

en

setContentView(R.layout.vectors);
l = (LinearLayout) findViewById(R.id.llCanvasV);
l.addView(vectorsView); //Line 50

1voto

brianestey Points 3206

Vous n'avez pas appelé setContentView avant la ligne 50, donc la ligne 49 ne peut pas encore trouver le LinearLayout.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X