2016-07-05 113 views
0

我正在製作一個應用程序,它建立了Arduino UNO R3和Android平板電腦之間的USB通信。 Arduino板卡正確發送數據,甚至正確地被平板電腦接收到,並且在嘗試顯示時,文本確實被打印,但是連續閃爍。Settext導致文本閃爍不規則

class MyThread extends Thread 
{ 
    @Override 
    public void run() 
    { 
     mCallback = new UsbSerialInterface.UsbReadCallback() 
     { //Defining a Callback which triggers whenever data is read. 
      @Override 
      public void onReceivedData(byte[] arg0) //data received in bytes 
      { 
       String data = null; 

       try 
       { 

        data = new String(arg0, "UTF-8"); 
        handler.post(new newthread(data));        

       } 
       catch (UnsupportedEncodingException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     }; 
    } 
} 
class newthread implements Runnable 
{ 
    String str1;   

    public newthread(String STR1) 
    {    
     str1 = STR1; 
    } 
    @Override 
    public void run() 
    { 

     DoseRateDisplay = (TextView) findViewById(R.id.DoseRateDisplay); 
     if(str1.contains("L")) 
     { tv6.append("Health OK"); } 
     else 
     { 
      DoseRateDisplay.settext(str1); 
     } 
    } 
} 

我認爲閃爍的原因可能是數據傳入太快。使用Thread.sleep並沒有幫助。什麼可以解決這個問題?另外,使用append而不是settext不會引起任何閃爍問題,但是數據會被附加到textview。

+0

數據是否迅速改變?如果沒有,你可以檢查'TextView'是否已經有這個文本,不要再重新設置。 – yennsarah

+0

這不是關於數據的變化。我嘗試從Arduino發送一個不變的數字,甚至閃爍。 – archity

+0

順便說一句,你可以請告訴你如何閱讀已經打印的textview的值... – archity

回答

0

從我的評論:嘗試檢查是否接收到的文本,並在TextView已文本是平等的:

if(!DoseRateDisplay.getText().toString().equals(str1)) { 
    DoseRateDisplay.settext(str1); 
} 
+0

邏輯上,if條件應該顛倒。而且,即使那樣,它仍然不工作,並且閃爍。 – archity

+0

當然,你是對的。你測試過(調試過)嗎?它多久進行一次陳述?每次? – yennsarah

+0

是的,我做到了。之前和之後沒有太大的區別。我認爲if條件每次都是正確的,即字符串總是不同的。 – archity