将字符串从线程蓝牙服务发送到主活动中的文本视图



我想将字符串(到障碍物的距离(中的值发送到主活动中的TextView。 我尝试使用处理程序,但仍然无法工作(崩溃(或什么也没收到。

从 HC-05 接收数据的零件代码(您可以在调试值分配给变量中看到的屏幕(

在此处输入图像描述

@Override
public void run() {
byte[] buffer = new byte[1024];
int bytes;
while(true){
try {
bytes = inputStream.read(buffer);
final String comingMsg = new String(buffer,0,bytes);
Log.d(TAG,"InputStream: " + comingMsg);
/*mHandler2.post(new Runnable() {
@Override
public void run() {
Message message = new Message();
message.obj = comingMsg;
mHandler2.sendMessage(message);
}
});*/
}catch (IOException e){
Log.e(TAG,"Write: Error reading input." + e.getMessage());
active=false;
break;
}
}
}

这是来自 MainActivity 的代码的一部分,我尝试在其中放置一些东西来从服务中获取值。 [我补充一点,目前我想在文本视图中看到蓝牙中的一些值。稍后我想创建解析字符串并将自定义文本发送到自定义文本视图 - 示例:FL:(左前(- 到一个文本视图,FR:(前右( - 到第二个文本视图]

有方法implementThreads((,因为我想做6个线程到6个TextView,每次都在刷新服务中的字符串值(在那里我尝试从蓝牙服务中获取值(

Log.d(TAG,"Check intent - result");
if(getIntent().getIntExtra("result",0)==RESULT_OK){
mDevice = getIntent().getExtras().getParcelable("bonded device");
myBluetoothService = new MyBluetoothService(getApplicationContext());
startConnection(mDevice,MY_UUID);
Log.d(TAG,"Check is active service");
checkIfActive();
}
Log.d(TAG,"Check intent - connect_to_paired");
if(getIntent().getIntExtra("connect_to_paired",0)==RESULT_OK){
mDevice = getIntent().getExtras().getParcelable("bonded_paired_device");
myBluetoothService = new MyBluetoothService(getApplicationContext());
startConnection(mDevice,MY_UUID);
Log.d(TAG,"Check is active service");
checkIfActive();
}
}

@Override
public void onStart(){
super.onStart();
myBluetoothService = new MyBluetoothService(getApplicationContext());
}
public void checkIfActive(){
Log.d(TAG,"CheckIfActive: Started");
if(myBluetoothService.active){
Log.d(TAG,"CheckIfActive: Running method implementThreads()");
implementThreads();
}
}
public void implementThreads(){
Log.d(TAG,"ImplementThreads: Started");
Thread thread = new Thread(){
@Override
public void run() {
try{
sleep(100);
}catch (InterruptedException e){
e.printStackTrace();
}
}
};
thread.start();
}
public void startConnection(BluetoothDevice device,UUID uuid){
Log.d(TAG,"StartConnection: Initializing connection");
myBluetoothService.startClient(device,uuid);
}

谢谢大家的帮助,因为这对我来说非常重要!

使用它来与UI Thread进行交互,以进行更新文本视图等操作。

new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
//YOUR CODE HERE
Message message = new Message();
message.obj = comingMsg;
mHandler2.sendMessage(message);
}
});

相关内容

最新更新