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

将USB串口数据解析为可用变量:Android与Arduino通信问询

嘿,这个需求我刚好做过类似的,分两种格式给你一步步说清楚哈:

从JSON格式数据中提取变量

如果Arduino发过来的是JSON格式的字符串,处理起来会比较省心,Android里有现成的工具可以用。

首先假设你的data字符串长这样:

{"vin": "1HGCR2F3XFA000001", "speed": 65.5, "runtime": 12345, "distance": 45678.9}

方法一:用Android自带的JSONObject

这是最基础的方式,不需要额外依赖:

try {
    JSONObject jsonObject = new JSONObject(data);
    // 提取各个字段,注意类型匹配
    String vin = jsonObject.getString("vin");
    double speed = jsonObject.getDouble("speed");
    long runtime = jsonObject.getLong("runtime");
    double distance = jsonObject.getDouble("distance");
    
    // 这里就可以用这些变量做后续处理啦
    Log.d("CarData", "VIN: " + vin + ", Speed: " + speed);
} catch (JSONException e) {
    // 解析出错,大概率是Arduino发的JSON格式有问题
    e.printStackTrace();
    Log.e("ParseError", "JSON解析失败:" + e.getMessage());
}

方法二:用Gson库(更优雅)

如果项目里已经引入了Gson(现在很多Android项目都会用),可以先定义一个数据类:

public class CarData {
    public String vin;
    public double speed;
    public long runtime;
    public double distance;
}

然后一行代码搞定解析:

Gson gson = new Gson();
CarData carData = gson.fromJson(data, CarData.class);
// 直接用carData.vin、carData.speed就行

从XML格式数据中提取变量

如果是XML格式,就得用XML解析工具了,Android自带的XmlPullParser就很好用,轻量高效。

假设你的data字符串是这样的:

<carData>
    <vin>1HGCR2F3XFA000001</vin>
    <speed>65.5</speed>
    <runtime>12345</runtime>
    <distance>45678.9</distance>
</carData>

用XmlPullParser的代码示例:

XmlPullParserFactory factory = null;
XmlPullParser parser = null;
String currentTag = "";
String vin = "";
double speed = 0.0;
long runtime = 0;
double distance = 0.0;

try {
    factory = XmlPullParserFactory.newInstance();
    parser = factory.newPullParser();
    parser.setInput(new StringReader(data));
    
    int eventType = parser.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT) {
        if (eventType == XmlPullParser.START_TAG) {
            currentTag = parser.getName();
        } else if (eventType == XmlPullParser.TEXT) {
            switch (currentTag) {
                case "vin":
                    vin = parser.getText();
                    break;
                case "speed":
                    speed = Double.parseDouble(parser.getText());
                    break;
                case "runtime":
                    runtime = Long.parseLong(parser.getText());
                    break;
                case "distance":
                    distance = Double.parseDouble(parser.getText());
                    break;
            }
        }
        eventType = parser.next();
    }
    
    // 解析完成,使用变量
    Log.d("CarData", "VIN: " + vin + ", Distance: " + distance);
} catch (Exception e) {
    e.printStackTrace();
    Log.e("ParseError", "XML解析失败:" + e.getMessage());
}

几个关键注意事项

  • 一定要确保Arduino发送的JSON/XML是标准格式,比如JSON的引号、逗号不能少,XML的标签要闭合,不然解析肯定报错。
  • 转换字节数组到字符串的时候,要指定正确的编码(比如new String(data, "UTF-8")),避免乱码导致解析失败。
  • 如果字段可能为空,记得加非空判断,比如用jsonObject.optString("vin")代替getString,避免空指针异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:17:45