[英]Receiving nullpointer exception from method of class object
我有一個在“主” XML文件中聲明的自定義視圖:
<com.app.DrawView
android:id="@+id/my_view"
android:layout_height="match_parent"
android:layout_width="match_parent" />
然后在我的活動的onCreate方法中:
setContentView(R.layout.main);
所有這些都能很好地顯示自定義視圖。 但是我需要做的是將值傳遞給自定義視圖。 因此,我嘗試制作自定義視圖類的實例:
DrawView drawView = (DrawView) findViewById(R.id.my_view);
然后,在DrawView類中,我創建了一個方法:
public void setUserData(boolean data){
useEraser = data;
}
現在,我的問題是,當嘗試在我的活動中為DrawView對象訪問此方法時,我一直得到NullPointerExeption,如下所示:
boolean value = true;
drawView.setUserData(value);
該錯誤指向“ drawView.setUserData(value)”行。 我究竟做錯了什么? 我知道我肯定犯了一個簡單的錯誤,但是它使我瘋狂地試圖找到它。 任何幫助或建議將是巨大的!
編輯:我接受了正確的答案,但是,我仍然想知道為什么我原來的解決方案不起作用。 因此,我發現,盡管我在問題中的排序正確,
DrawView drawView = (DrawView)findViewById(R.id.my_view);
之前
setContentView(R.layout.main);
我知道這是我所忽略的簡單錯誤! 謝謝大家的回答,我非常感激。 我希望這對遇到類似問題的任何人都有用。
如果您想創建一個新的,請嘗試一下,
將線性布局作為持有人放入xml
<LinearLayout
android:id="@+id/ln1"
android:layout_width="wrap_content"
android:layout_height="300dp" >
</LinearLayout>
並在下面的oncreate使用中
LinearLayout ln = (LinearLayout)findViewById(R.id.ln1);
com.example.mixed.DrawView dw2 = new DrawView(getApplicationContext());
dw2.setUserData(false);
ln.addView(dw2);
如果將其放在布局xml中,則不會有任何問題。
您不會從方法調用中“接收”異常。 方法可能會引發異常,您可能會在try-catch塊中捕獲該異常。 在這種情況下,異常將被catch塊捕獲。 否則,它將在方法內部發生。 由於調用方引發了異常,因此該錯誤不在您的方法中。
在這種情況下:
boolean value = true;
drawView.setUserData(value);
唯一可以為null的是drawView。 因此,findViewById返回null,或者在其他位置將drawView設置為null。 您可以在此處放置一個斷點來證明這一點:
DrawView drawView = (DrawView) findViewById(R.id.my_view);
並檢查drawView的值。
從您提供的信息中,我看不到為什么會這樣,但這是您必須執行的檢查。
順便說一句,您應該始終在自定義視圖中提供所有3個視圖構造函數原型。 您不見了:
public DrawView(Context context, AttributeSet attrs, int defaultStyle){
super(context, attrs, defaultStyle);
如果默認的窗口小部件樣式被覆蓋,則使用此構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.