我是android的新手,我正在编写一个程序使用蓝牙,所以我使用另一个线程和处理程序来更新UI。当我只有一个TextView时,它可以工作,但是当我添加更多textview时,它不起作用。
我的OnCreate
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvSpeed = (TextView) findViewById(R.id.SpeedView02);
tvHeart = (TextView) findViewById(R.id.HeartRate02);
tvGrade = (TextView) findViewById(R.id.Grandient02);
btnConnect = (Button) findViewById(R.id.BtnConnect);
btAdapter = BluetoothAdapter.getDefaultAdapter();
if (btAdapter == null) {
Toast.makeText(this,
"Bluetooth is not supported on this hardware platform",
1000).show();
onDestroy();
}
}
我的处理程序
private final Handler handler = new Handler() {
private int current;
public void handleMessage(Message msg) {
current = (Integer) msg.obj;
switch(msg.what)
{
case 1:
tvSpeed.setText(current + "Km/h");
break;
case 2:
tvHeart.setText(current + "Bps");
break;
default:
break;
}
tvGrade.setText(0); // if I remove this, it works.
}
};
我的main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:id="@+id/SpeedView01" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="速度:"></TextView>
<TextView android:id="@+id/SpeedView02" android:layout_width="70dip"
android:layout_height="wrap_content"
android:text=""></TextView>
<TextView android:id="@+id/HeartRate01" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="心率:"></TextView>
<TextView android:id="@+id/HeartRate02" android:layout_width="70dip"
android:layout_height="wrap_content"
android:text=""></TextView>
<TextView android:id="@+id/Gradient01" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="坡度:"></TextView>
<TextView android:id="@+id/Grandient02" android:layout_width="70dip"
android:layout_height="wrap_content"
android:text=""></TextView>
</LinearLayout>
<LinearLayout android:orientation="horizontal"
android:layout_width="match_parent" android:layout_height="wrap_content" >
<Button android:id="@+id/BtnConnect" android:layout_width="match_parent"
android:layout_height="wrap_content" android:text="Connect"
android:layout_weight="1.0" android:onClick="onConnectButtonClicked" />
<Button android:id="@+id/BtnQuit" android:layout_width="match_parent"
android:layout_height="wrap_content" android:text="Exit"
android:layout_weight="1.0" android:onClick="onQuitButtonClicked" />
</LinearLayout>
</LinearLayout>
答案 0 :(得分:3)
setText(0);
您意识到setText(int)
是一个需要有效R.string.XXX
值的函数...
显然,0永远不会是一个有效的值,它会大量抛出一个&#34;资源未找到&#34;异常。
答案 1 :(得分:0)
我会建议您使用AsyncTask代替处理程序,而不是处理程序。
doInBackground()
内,实施所有后台任务onPostExecute()
方法中进行UI更新。