我正在尝试设置一个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>
答案 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);
}
}