2014-02-24 38 views
0

此代碼太添加計時器的代碼..但我的代碼有問題,當涉及到計時器代碼... 我將如何改進計時器的代碼我的代碼for循環.. 希望你明白我的代碼..並改善了我的代碼..謝謝!Android定時器和timerTask錯誤

package com.thesis.americansignlanguage; 

import java.io.IOException; 
import java.io.InputStream; 
import java.util.Timer; 
import java.util.TimerTask; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class AlphabetCompareClass extends Activity { 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.alphabetcompare); 
    final String get; 
    Bundle gotWord = getIntent().getExtras(); 
    get = gotWord.getString("key"); 
    TextView Word = (TextView)findViewById(R.id.textView1); 
    final ImageView img = (ImageView)findViewById(R.id.image_alpha) ; 
    Word.setText(get); 

    for(int x = 0; x > gotWord.getString("key").length(); x++) { 

     final InputStream is; 
      Timer timer = new Timer(); 
      TimerTask timertask = new TimerTask() { 

       @Override 
       public void run() { 
        try { 
         is = getResources().getAssets().open(get + ".png"); 
         Bitmap bitmap = BitmapFactory.decodeStream(is); 
         img.setImageBitmap(bitmap); 

        } catch (IOException e) { 
         return; 
        } 


       } 
      }; 
     } 


    }; 

} 
+0

run方法,更新界面是什麼問題?? – Raghunandan

+0

你面臨的問題是什麼? –

+0

發佈您的logcat。 – Piyush

回答

0

TimerTask在不同的線程上運行。用戶界面只能從UI線程更新。

img.setImageBitmap(bitmap);應該在UI線程

使用runOnUiThread上執行。您也可以使用Handler。另外我不明白需要使用for循環。在當前的代碼中發現

runOnUiThread(new Runnable() { 
@Override 
public void run() { 
    img.setImageBitmap(bitmap); 
} 
}); 
+0

我使用的for循環,例如當我輸入你好for循環將決定多長時間的輸入字符串的長度。 – kathleen55

+0

如何使用runOnUiThread先生? – kathleen55

+0

@約瑟夫我仍然不明白需要。除此之外。我沒有提到在繁榮的K post中寫下的第一個錯誤。其次使用處理程序。 – Raghunandan

0

兩個問題:

第一:不使用timer例如安排timerTask。做到這一點的:

timer.schedule(timertask, 500, 3000); 

二:從非UI線程更新UI內的TimerTask

使用runOnUiThreadHandlerrun方法從TimerTask

+0

如何使用runOnUiThread或Handler先生? – kathleen55

+0

@Joseph:參見@ Raghunandan編輯答案也使用'Your_Activity.this.runOnUiThread'而不是'runOnUiThread',因爲可能是Timertask上下文中不可用的方法。 –