private BluetoothManager.OnReceivedListener onReceivedListener = new BluetoothManager.OnReceivedListener() { @Override public void onReceived(String data) { Log.d(TAG,"收到蓝牙消息!"); Type typeJson = new TypeToken<Map<String, Object>>() {}.getType(); Map<String, Object> map = new Gson().fromJson(data, typeJson); receiveMessageMethod(map.get("message").toString(),map.get("messageType").toString()); } };
时间: 2024-03-31 11:34:15 浏览: 42
这段代码中的Gson是Google提供的一个Json解析库,可以将Json字符串解析成Java对象,并将Java对象转换成Json字符串。在这段代码中,通过调用Gson的fromJson方法,将收到的Json字符串解析成一个Map对象。在fromJson方法中,使用了一个TypeToken来指定解析后的对象类型为Map<String, Object>。这样可以方便地获取消息内容和消息类型,并将它们传递给receiveMessageMethod方法。
相关问题
public class InventoryRFID implements RfidEventsListener { @Override public void eventReadNotify(RfidReadEvents rfidReadEvents) { TagData[] tags = reader.Actions.getReadTags(500); if (tags == null) { return; } for (final TagData tag : tags) { startBeepingTimer(); if (epcList.add(tag.getTagID())) { runOnUiThread(new Runnable() { @Override public void run() { String epc = tag.getTagID(); if (epc.startsWith("40")) { String hexEpc = hexToAscii(epc); Log.e("tag", tag.getTagID()); reader(hexEpc); } } }); } } }怎么使用 Handler 避免并发修改 UI。
可以使用 Handler 来避免并发修改 UI,具体步骤如下:
1. 创建 Handler 对象,并在主线程中进行实例化。
2. 在 runOnUiThread 中,使用 Handler 发送一条消息,让其在主线程中更新 UI。
3. 在 Handler 中处理消息,更新 UI。由于 Handler 在主线程中运行,所以不会出现并发修改 UI 的问题。
修改后的代码如下:
```
public class InventoryRFID implements RfidEventsListener {
private Handler mHandler = new Handler(Looper.getMainLooper());
@Override
public void eventReadNotify(RfidReadEvents rfidReadEvents) {
TagData[] tags = reader.Actions.getReadTags(500);
if (tags == null) {
return;
}
for (final TagData tag : tags) {
startBeepingTimer();
if (epcList.add(tag.getTagID())) {
mHandler.post(new Runnable() {
@Override
public void run() {
String epc = tag.getTagID();
if (epc.startsWith("40")) {
String hexEpc = hexToAscii(epc);
Log.e("tag", tag.getTagID());
reader(hexEpc);
}
}
});
}
}
}
}
```
代码解释: public class ModemDumpCollectService extends Service { private final String TAG = "Mi_ModemDumpCollect_Service"; private static ModemDebugDumpCollect sModemDebugDumpCollect; void read_mcrash_history_printer(PrintWriter pw) { String crash_history = null; String crash_histroy_path = "/data/vendor/ramdump/mcrash_history"; try{ BufferedReader crash_bufferedReader = Files.newBufferedReader(Paths.get(crash_histroy_path)); pw.println("------ MODEM CRASH HISTORY (/data/vendor/ramdump/mcrash_history) ------"); while((crash_history = crash_bufferedReader.readLine()) != null){ pw.println(crash_history); } crash_bufferedReader.close(); } catch (IOException e) { Log.d(TAG, "read crash history failed" + e); } } @Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { read_mcrash_history_printer(pw); } @Override public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate"); sModemDebugDumpCollect = new ModemDebugDumpCollect(); sModemDebugDumpCollect.modemDumpCollectStart(); Log.d(TAG, "start modem dump collect thread"); } @Override public IBinder onBind(Intent intent) { return null; } }
这段代码是一个Android Service,名为ModemDumpCollectService。它用于收集和打印Modem的崩溃历史记录。
在这个Service中,有一个私有变量TAG,用于标识这个Service。还有一个静态变量sModemDebugDumpCollect,它是ModemDebugDumpCollect类的实例,用于启动Modem崩溃记录的收集。该Service还有一个方法read_mcrash_history_printer,它用于读取Modem的崩溃历史记录,并将其打印到PrintWriter对象中。
在Service的dump方法中,会调用read_mcrash_history_printer方法,将Modem的崩溃历史记录打印出来。在Service的onCreate方法中,会初始化sModemDebugDumpCollect,并启动Modem崩溃记录的收集。最后,在Service的onBind方法中,会返回null,表示这个Service不支持绑定。
总的来说,这个Service的作用是收集和打印Modem的崩溃历史记录,方便开发人员进行调试和分析。
阅读全文