当我使用Handler更新组TextView时,它失败了

时间:2011-12-09 06:56:38

标签: android

我是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>

2 个答案:

答案 0 :(得分:3)

setText(0);

您意识到setText(int)是一个需要有效R.string.XXX值的函数...

显然,0永远不会是一个有效的值,它会大量抛出一个&#34;资源未找到&#34;异常。

答案 1 :(得分:0)

我会建议您使用AsyncTask代替处理程序,而不是处理程序。

  1. doInBackground()内,实施所有后台任务
  2. 一旦有了值,就可以在onPostExecute()方法中进行UI更新。