2015-04-19 25 views
0

在我的應用程序,當用戶寫錯別字,我的EditText變成紅色,然後就變成write.Actually我試圖做一個紅色blink.This是我工作的代碼android Asynctask thread.sleep?

class BlinkTask extends AsyncTask<EditText, Boolean, Boolean> 
{ 

    @Override 
    protected Boolean doInBackground(EditText... params) { 

     EditText et1=params[0]; 

     try { 
      et1.setBackgroundColor(Color.RED); 
      Thread.sleep(1000); 

     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     try { 
      et1.setBackgroundColor(Color.WHITE); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

     return true; 
    } 
} 

但是當我拿et1.setBackgroundColor(白顏色);出的try-catch的block.It沒有給出錯誤可惜MYAPP具有stopped.I檢查loggat卻看見nothing.this是假的代碼 類BlinkTask擴展的AsyncTask {

@Override 
    protected Boolean doInBackground(EditText... params) { 

     EditText et1=params[0]; 

     try { 
      et1.setBackgroundColor(Color.RED); 
      Thread.sleep(1000); 

     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 


      et1.setBackgroundColor(Color.WHITE); 



     return true; 
    } 
} 

我不知道爲什麼它需要嘗試抓住,雖然它沒有任何錯誤。

也是我想問創建此任務的AsyncTask類是一個很好的解決方案,否則nwhat可以done.thank你

回答

1

你應該使用animations用於此目的。

+0

okey但爲什麼不是我的第二個代碼工作 –

+0

您無法觸摸後臺線程的UI線程。你應該在'onPostExecute()'中做到這一點。 – questioner

0

AsyncTask不在UI線程上運行,因此它無法觸摸UI組件。但是這樣做有一個竅門。

class BlinkTask extends AsyncTask<EditText, Integer, Boolean> 
{ 

    private EditText et1; 

    @Override 
    protected Boolean doInBackground(EditText... params) { 

     et1 = params[0]; 

     try { 
      publishProgress(Color.RED); 
      Thread.sleep(1000); 

     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     try { 
      publishProgress(Color.WHITE); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

     return true; 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     et1.setBackgroundColor(values[0]); 
    } 
} 

但說實話,在asynctask中改變edittext的背景顏色是一個壞主意。使用應該看看動畫。

+0

謝謝Bojan.Why是不是不給錯誤,但當我的應用程序工作ı不幸的是應用程序已停止,並沒有在logcat –

+0

沒有異步任務它工作嗎? –

+0

如果你看我的問題我的第一代碼在fparagraph 1.但我的第二段代碼在第2段不工作。他們都是asynctask。只在我的第二段這一行et1.setBackgroundColor(Color.WHITE);不在try-catch中,代碼不是wprking。 –

0

我想因爲你現在處於主線程的不同線程中,並且編輯文本是UIthread的一個元素,那麼你必須在UIthread中使用你的代碼。

你可以搜索「如何在java android中使用runonUIthread」。

希望這對你有所幫助。

+0

謝謝。但爲什麼當我得到這個et1.setBackgroundColor(Color.WHITE)時,這段代碼正常工作;在try-catch塊中。 –