TextView.setText()抛出NullPointerException

时间:2011-08-19 00:28:02

标签: android textview

我正在尝试设置一个TextView的文本,听起来很简单,但它一直在抛出错误,这是我的功能:

private void getAndPutNum(){
    TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    String myNum = tm.getLine1Number();
    TextView numDisplay = (TextView)findViewById(R.id.myNum);
    try{
        numDisplay.setText(myNum);
    }catch(Exception e){
        Toast.makeText(getApplicationContext(), "ERROR", Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }
}

我已将READS_PHONE_STATE设置在我的清单的'使用权限'中。谁能看到我可能做错了什么?

更新
这是我的布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:weightSum="1">
<TextView android:gravity="center|center_vertical|center_horizontal" android:textAppearance="?android:attr/textAppearanceLarge" android:text="@string/number" android:textSize="65px" android:layout_gravity="center|center_vertical|center_horizontal" android:layout_height="fill_parent" android:layout_weight=".8" android:layout_width="fill_parent" android:layout_marginTop="-40dp" android:keepScreenOn="true" android:id="@+id/myNum"></TextView>

3 个答案:

答案 0 :(得分:2)

我试图在 I setContentView()之前调用我的方法,因此当该方法尝试访问布局中的当前元素时,会导致NullPointerException

答案 1 :(得分:0)

布局中的文本设置为@ string / number,尝试摆脱它。

答案 2 :(得分:0)

这个getAndPutNum()方法是否包含在活动的内部类中,而这个内部类是一个对话甚至是另一个活动?如果是这样,请注意一种可能性(它发生在我身上好几次):

class Activity1 extends Activity {
    public void onCreate(...) {
        setContentView(R.layout.some_xml); // your R.id.myNum is in this layout
    }

    class InnerDialog extends Dialog {
         public void onCreate(...) {
             setContentView(R.layout.other_xml); // but this layout DOESN'T have R.id.myNum
         }

         private void getAndPutNum() {
             findViewById(R.id.myNum);  // This will return NULL, because it's 
                                        // looking for myNum in other_xml, instead of
                                        // some_xml.

             // You should qualify findViewById()
             Activity1.this.findViewById(R.id.myNum);
         }
    }