2016-07-05 79 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