2012-04-12 87 views
2

我試圖使用類擴展視圖來添加一個畫布,然後將其添加到屏幕底部的線性佈局,在一些按鈕下。我知道我做得不對,但我無法弄清楚什麼是錯的。當我嘗試添加線性佈局時,出現nullpointerexception。建議嗎?爲什麼添加線性佈局(Android)時會出現nullpointerexception?

下面是部分代碼:

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

}

這裏是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> 

這裏是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) 

回答

7

您需要撥打setContentView先致電findViewById。請看下圖:

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 
} 
1

常見錯誤:

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

搜索在當前內容查看,但沒有設置。

變化;

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

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

您還沒有叫的setContentView線50之前,所以49行無法找到的LinearLayout呢。

相關問題