2011-03-04 198 views
0

我對Android應用程序有疑問。我想在稍後創建一個遊戲,並且我正在嘗試需要了解的類和函數。 現在我試圖掌握如何以一種好的方式使用線程,但我的應用程序是「強制關閉」,當我觸摸按鈕。我的Thread()代碼有什麼問題?

對於這個測試應用程序,所有在屏幕上都有一個TextView和一個按鈕。 該按鈕在按下時調用threadStart()。 (onClick in xml) 而我想要它做的是創建一個線程,將變量增加1,然後向UI線程報告,然後用新值更新文本視圖。

有人可以看到我做錯了這個小代碼片嗎?


package com.weldeborn.tc; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.widget.TextView; 

public class ThreadCounter extends Activity { 

    TextView txtCounter1; 

    int value=0; 
    final Handler mHandler = new Handler(); 
    final Runnable mUpdateResults = new Runnable() { 
     public void run() { 
      updateResult(); 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     txtCounter1 = (TextView) findViewById(R.id.counter1); 

    } 

    protected void threadStart() { 
     Thread t = new Thread() { 
      public void run() { 
       doSomething(); 
       mHandler.post(mUpdateResults); 
      } 
     }; 
     t.start(); 
    } 

    private void doSomething() { 
     value = value+1; 
    } 

    private void updateResult() { 
     txtCounter1.setText(value); 
    } 
} 

我的代碼是基於「在UI線程處理昂貴的操作」標題下Android Developer: The Common Tasks and how to do them部分的例子。

我很感激任何幫助。

+1

沒有logcat的錯誤輸出,您將永遠無法調試程序。谷歌它,使用它。另外如果你有XML代碼,你應該使用它。 – Klaus 2011-03-04 13:23:44

+0

但你的onclickListener在哪裏? – 2011-03-04 13:27:56

+0

在buttonView(在main.xml文件中)我使用android:onClick =「threadStart」。我認爲它的作用是實現一個onCliclListener,它已經爲我以前的應用程序工作過。 – Weldeborn 2011-03-04 14:09:16

回答

1

直接傳遞整數時,setText無法正常工作。嘗試將其轉換爲字符串之前:

txtCounter1.setText(String.valueOf(value));

此外,請檢查this answer有關需要更新UI的線程的用法。

0

如果threadStart是你的onClick簽名必須

public void threadStart(View v) 
+0

感謝您的快速解答!我還沒有設法解決它,但我會讀取建議的鏈接,並糾正我錯過的int-String問題。 – Weldeborn 2011-03-04 14:11:03

+0

我以前做過,但是這次我錯過了。謝謝! – Weldeborn 2011-03-04 15:04:15