You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从指定格式数据中提取非空mDevice并显示在ListView中

嘿,这个需求在Android BLE开发场景里挺常见的,我给你一步步拆解实现方法:

步骤1:提取mDevice的MAC地址

首先得看你拿到的这份扫描数据是对象实例还是日志字符串,两种情况的提取方式不同:

  • 如果是已经拿到了对应的Java对象(比如自定义的扫描结果类,或者Android原生的ScanResult):
    直接通过对象的字段/方法获取MAC地址就行。要是用的是Android原生ScanResult,代码可以这么写:

    // 假设scanResult是你拿到的扫描结果对象
    String macAddress = scanResult.getDevice().getAddress();
    

    要是你用的是自定义的扫描数据类,直接访问mDevice字段即可:

    String macAddress = yourScanDataObject.mDevice;
    
  • 如果只有这段日志字符串,那得用字符串解析来提取MAC:
    可以用正则表达式匹配标准的MAC地址格式(XX:XX:XX:XX:XX:XX),代码示例:

    String scanLog = "{ mDevice = 27: 62: 4A: 9E: CE: 88, mScanRecord = ScanRecord[...], mRssi = -88, ... }";
    // 匹配mDevice后面的MAC内容,包含空格和冒号
    Pattern macPattern = Pattern.compile("mDevice = ([0-9A-Fa-f: ]+)");
    Matcher matcher = macPattern.matcher(scanLog);
    String macAddress = null;
    if (matcher.find()) {
        // 去掉MAC里的空格,得到标准格式
        macAddress = matcher.group(1).replaceAll("\\s", "");
    }
    
步骤2:校验MAC地址非空

拿到MAC后先做非空校验,避免后续操作出现空指针问题:

if (macAddress != null && !macAddress.trim().isEmpty()) {
    // 确认MAC有效,接下来更新ListView
}
步骤3:更新ListView显示

假设你已经在布局里定义了ListView,这里用最常用的ArrayAdapter来实现数据绑定:

首先在Activity/Fragment的初始化阶段(比如onCreate)配置数据源和适配器:

// 用来存储有效MAC地址的数据源
private List<String> validMacList = new ArrayList<>();
private ArrayAdapter<String> macAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    
    // 初始化适配器,用系统默认的列表项布局
    macAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, validMacList);
    // 给ListView设置适配器
    ListView macListView = findViewById(R.id.your_listview_id);
    macListView.setAdapter(macAdapter);
}

然后在校验MAC非空后,把MAC添加到数据源并刷新列表:

// 确保在主线程执行UI操作(如果是BLE扫描回调,大概率要切换线程)
runOnUiThread(() -> {
    if (macAddress != null && !macAddress.trim().isEmpty()) {
        // 可选:避免添加重复的MAC地址
        if (!validMacList.contains(macAddress)) {
            validMacList.add(macAddress);
            // 通知适配器数据更新,ListView会自动刷新显示
            macAdapter.notifyDataSetChanged();
        }
    }
});
额外注意点
  • 线程切换:BLE扫描的回调方法一般是在子线程执行的,Android不允许在子线程操作UI,所以一定要用runOnUiThread或者Handler切换到主线程再更新ListView。
  • MAC合法性校验:如果需要更严谨,可以额外检查MAC的格式是否符合标准(比如长度是否为17位,是否由6组两位十六进制数组成),避免解析到错误的字符串。

内容的提问来源于stack exchange,提问作者raviteja84

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:07:01