2014-10-15 2 views
-1

im пытается сравнить текст в андроиде, чтобы избежать обновления текстов, если это не необходимо (в противном случае тексты для разных полей обновляются каждые 50 мс).Сравнение текста в android

С обычными текстами это не проблема. Все работает нормально. Но: Если в тексте есть цифры, текст кажется не равным. Зачем?

Некоторые примеры: "Abschaltpunkt" равно "Abschaltpunkt" (OK)/ "Gewicht" равно "Gewicht" (OK)/ "100 кг" не равно "100 кг" (NOK)/ «Abschaltpunkt 2» НЕ равно «Abschaltpunkt 2» (NOK»

нового вопроса после редактирования (сравнительные отлично теперь работает). Как вы видите, я использую поток пользовательского интерфейса для обновления текста. Это приложение работает в сети и принимает arround 300 сообщений в секунду с разными данными (да, это необходимо). Поэтому мне нужен компаньон, иначе поток будет заблокирован, и приложение не будет отвечать на пользовательские входы. Есть ли еще одно решение Тион? Или мое решение хорошее?

Это мой код:

\t /** 
 
\t * Compares the current and new text und updates the text if necessary 
 
\t * @param RessourceID given by R.id... 
 
\t * @param New text 
 
\t */ 
 
\t private void ChangeText (final int RessourceID, final String sText) { \t 
 
\t \t try { 
 
\t \t \t TextView tv = (TextView) findViewById(RessourceID); 
 
\t \t \t // Erst prüfen ob Text ersetzt werden muss -> Spart Rechenzeit 
 
\t \t \t if (tv.getText().toString().equals(sText)) { 
 
\t \t \t \t Log.e(this.getClass().getSimpleName(), "Text nicht ersetzen: " + tv.getText() + " != " + sText); 
 
\t \t \t } else { 
 
\t \t \t \t ChangeTextThread(tv, sText); 
 
\t \t \t \t Log.e(this.getClass().getSimpleName(), "Text ersetzen: " + tv.getText() + " != " + sText); \t \t \t \t \t 
 
\t \t \t } 
 
\t \t } catch (Throwable t) { 
 
\t \t \t Log.e(this.getClass().getSimpleName(), "ChangeText", t); 
 
\t \t } 
 
\t } 
 
\t \t 
 
\t \t /** 
 
\t \t * Change the text in UI tread 
 
\t \t */ 
 
\t \t private void ChangeTextThread (final TextView tv, final String sText) { 
 
\t \t \t this.runOnUiThread(new Runnable() { 
 
\t \t \t \t public void run() { 
 
\t \t \t \t \t 
 
\t \t \t \t \t try { 
 
\t \t \t \t \t \t tv.setText(sText); 
 
\t \t \t \t \t } catch (Throwable t) { 
 
\t \t \t \t \t \t \t Log.e(this.getClass().getSimpleName(), "ChangeTextThread", t); 
 
\t \t \t \t \t } 
 
\t \t 
 
\t \t \t \t } 
 
\t \t \t \t }); 
 
\t \t }

+0

Новый вопрос. – Selucky

ответ

3

попробовать этот способ

if(tv.getText().toString().equals(sText)) 

использовано .equals() или .equalsIgnoreCase() метод для сравнения строк

+0

Правильно, на что я хотел ответить;) – TehCoder

0

Попробуйте ниже код:

if(tv.getText().toString.equalsIgnoreCase(sText)){ 
    //Do your stuff here 
} 
Смежные вопросы