我有一个Android应用程序从线程a中的BLE设备接收ASCII字符串(因此字符串中的每个字符正好对应一个字节)。
这些字符串以最大长度的块形式出现。例如,假设最大长度为4,我们收到以下字符串:
“ABCD”(4)、“EFGH”(4)、“I\R\N”(3)
我很确定我在这里重新发明轮子,但我在网上找不到一个明确的答案。在Java/Android中一定有更好的方法来做到这一点。听起来像是很常见的模式。
我主要是用C#来做事情的,所以我可能会缺少一些类。我还查看了ByteBuffer,但似乎这样做会迫使我实现自己的readLine()函数,因为没有可供BufferedReader使用的InputStream等。
您可以使用GreenRobot的EventBus轻松地在线程之间发送数据。
GreenRobot的EventBus是一个允许组件(活动、片段、服务和背景线程)之间通信的库。
Build.Gradle
dependencies {
compile 'org.greenrobot:eventbus:3.0.0'
}
public class BleListener{
private static Context _context;
private static BleListener _instance;
private static ListenerThread _listenerThread;
private static boolean _isListenerThreadEnable = false;
private BleListener(Context context){
_context = context;
// set ble config and open ble port in here
// ....
// enable listener thread
if (!_isListenerThreadEnable) {
_listenerThread = new ListenerThread();
_listenerThread.start();
_isListenerThreadEnable = true;
}
}
// call this function from outer class
public static BleListener getInstance(Context context) {
if (_instance == null) {
_instance = new BleListener(Context context);
}
return _instance;
}
private class ListenerThread extends Thread {
ListenerThread() {
// setting your receive buffer, thread priority in here
}
@Override
public void run() {
while (_isListenerThreadEnable) {
synchronized (_bleDevice) {
int _receivedCount = _bleDevice.getQueueStatus();
while (_receivedCount > 0) {
// append your received data in here with ByteBuffer or StringBuffer
// ..
// parsing data for get valid data
// ..
// send valid data out when receive special character (end of message flag) or when timeout received with EventBus
EventBus.getDefault().post( ValidModal);
}
}
Thread.Yield();
}
}
}
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessage(ValidModal) {
// You will get valid data from thread A here.
//..
}
问题内容: 我想通过获取从EditText输入的文本来将文件保存到内部存储中。然后,我希望同一个文件以字符串形式返回输入的文本,并将其保存到另一个字符串中,以备后用。 这是代码: 我提供了一些评论,以帮助你进一步分析我要在哪里完成操作/使用变量的观点。 问题答案: 希望这对你有用。 写文件: 读取文件:
我刚来Java,如果这是个明显的问题,我很抱歉。 我正在尝试逐个字符读取字符串以创建树节点。例如,输入,节点为 我注意到了 我可以用一个循环来获得所有的角色吗?就像 我试过了,但不管用。 我该怎么做? 非常感谢你的帮助。 扫描器读取器=新扫描器(System.in);System.out.println(“将节点输入为大写字母,不带空格,结尾为'/'”);int i=0;char node=rea
问题内容: 我正在尝试连接Java中的字符串。为什么这不起作用? 问题答案: 你可以使用运算符来连接字符串: 被隐式转换为。
问题内容: Java没有运算符重载的概念。 Still +运算符的行为与带数字的加法运算符和带字符串的串联运算符相同。这类似于操作员的重载行为。 那么,Java是否有运算符重载? 问题答案: Java语言会重载某些运算符吗? 是! 如您所知,运算符可以表示两种不同的含义,即字符串串联或数字加法。 根据定义 ,这是一个运算符重载。 以下是 所有 Java运算符的列表: [JLS 3.12运算符](h
我有一个情况,我需要启动两个线程一个接一个。我尝试了以下代码片段,在这里我可以启动Thread12,但不能启动Thread2。我怎样才能开始两个......?如何启动两个线程一个接一个...? 代码片段
问题内容: 我想使用一个 for 循环来计算一个字符串中的一个字符在另一个字符串中出现的次数。 例如,如果string1 =’python’和string2 =’boa constrictor’,则应计算为6(2 t,3 o,1 n) 有谁知道如何做到这一点? 问题答案: 很简单: