Я запускаю поток, который получает строку данных от устройства несколько раз в секунду.Я пытаюсь обновить TextView для отображения этих данных, однако, как только я запускаю поток в connector.run()
, я не могу установить текст TextView.Даже когда я запускаю setText()
над методом run, он не работал, если я не закомментировал вызов метода run.
Здесь я вызываю метод run.
readWeight.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//inputWindow.setText("helloooooooo worldddddd");
connector.run();
setInputWindow();
//readWeight.setVisibility(View.INVISIBLE);
}
});
Вот мой метод запуска в другом классе.
public void run() {
// Keep listening to the InputStream while connected
while (true) {
try {
output = "";
//read the data from socket stream
if(mmInStream != null) {
mmInStream.read(buffer);
for(byte b : buffer)
{
char c = (char) b;
if(c >=' ' && c <'z') {
// System.out.print(c);
output += c;
}
}
System.out.println();
Intent intent = new Intent();
intent.setAction("com.curie.WEIGHT_RECEIVED");
intent.putExtra("Output",output);
LocalBroadcastManager.getInstance(InputActivity.getContext()).sendBroadcastSync(intent);
// LocalBroadcastManager.getInstance(InputActivity.getContext()).sendBroadcast(intent);
}
// Send the obtained bytes to the UI Activity
} catch (IOException e) {
//an exception here marks connection loss
//send message to UI Activity
break;
}
}
}
Я правильно получаю данные, когда проверяю строку, полученную BroadcastReceiver, поэтому проблема не возникает.
Также мне не нужно обновлять экран каждый раз, я мог бы обновлять его каждую секунду или около того, если это улучшит его?Спасибо.
РЕДАКТИРОВАТЬ: Добавленный обработчик не компилируется.пожалуйста помоги.новый обработчик (). post (новый Runnable () {
@Override
public void run() {
// Always cancel discovery because it will slow down a connection
//Log.d("workkkkkk","$$$$$$$$$$$$$$$$****** printingggggg ******$$$$$$$$$$$$$$$$");
while (true) {
//counter++;
try {
output = "";
//read the data from socket stream
//mmInStream != null && counter%10000000 == 1
if(mmInStream != null) {
mmInStream.read(buffer);
for(byte b : buffer)
{
char c = (char) b;
if(c >=' ' && c <'z') {
// System.out.print(c);
output += c;
}
}
System.out.println();
Intent intent = new Intent();
intent.setAction("com.curie.WEIGHT_RECEIVED");
intent.putExtra("Output",output);
LocalBroadcastManager.getInstance(inputContext).sendBroadcastSync(intent);
// LocalBroadcastManager.getInstance(InputActivity.getContext()).sendBroadcast(intent);
}
// Send the obtained bytes to the UI Activity
} catch (IOException e) {
//an exception here marks connection loss
//send message to UI Activity
break;
}
}
inputContext.runOnUiThread(new Runnable() {
@Override
public void run() {
// here do the UI chnages
// you can set text in textview Here
}
});
}
});