2016-07-05 14 views
0

Ich mache eine App, die USB-Kommunikation zwischen einem Arduino UNO R3 und einem Android-Tablet herstellt. Arduino Board sendet Daten korrekt und es wird sogar von Tablet korrekt empfangen und wenn versucht, anzuzeigen, wird der Text gedruckt, aber mit einem eher kontinuierlichen Flimmern.Settext verursacht irrativ flimmernden Text

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); 
     } 
    } 
} 

Ich denke, der Grund für Flimmern kann sein, dass die Daten zu schnell eingehen. Die Verwendung von Thread.sleep hilft nicht. Was kann die mögliche Lösung für dieses Problem sein? Außerdem verursacht das Verwenden von append anstelle von settext keine flackernden Probleme, aber dann werden die Daten an textview angehängt.

+0

Bieten die Daten schnell ändern? Wenn nicht, können Sie überprüfen, ob der Texttext bereits diesen Text enthält und nicht erneut einstellen. – yennsarah

+0

Es geht nicht um Datenänderungen. Ich habe versucht, eine konstante Zahl von Arduino zu senden, selbst das flackert. – archity

+0

BTW, können Sie bitte sagen, wie Sie den Wert der bereits gedruckten Textansicht lesen ... – archity

Antwort

0

Von meinem Kommentar: versuchen zu überprüfen, ob der Text erhalten und der Text bereits im TextView sind gleich:

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

Logisch sollte die if-Bedingung invertiert werden. Außerdem funktioniert es immer noch nicht und flackert auch dann noch. – archity

+0

Ja natürlich, Sie haben Recht. Haben Sie es getestet (debuggt)? Wie oft geht es in die Aussage? Jedes Mal? – yennsarah

+0

Ja, tat ich. Vorher und nachher gab es keinen großen Unterschied. Ich denke, dass die if-Bedingung jedes Mal wahr wird, d. H. Die Strings sind immer unterschiedlich. – archity

Verwandte Themen