我正在使用AWS IoT从微电子传感器读取和发布一些信息。我能够在应用程序中获取json文件作为一堵大文本墙,但它不是很可读。我使用TextView是因为我不希望用户能够更改信息。我的问题是我找不到删除用户不需要的零件的方法。
我是应用程序创建的新手,因此我尝试尽可能简单地做到这一点。我已经准备好接收信息的xml;我只需要一个可以传递给它的变量中的信息即可。我已经尝试实现字符数组,但是无法克服我无法编辑文本视图的事实。
tvLastMessage = (TextView) findViewById(R.id.tvLastMessage);
这是我目前收到的文本块。看起来像这样:
{"sensors":[{"name":"steamTemp","data":"181.39","state":1,
{"name":"waterTemp","data":"-713.15","state":0,
{"name":"waterFlow","data":"0.00","state":3,
{"name":"dieselFlow","data":"0.00","state":2,
{"name":"manualResetLevel","data":"1","state":0,
{"name":"waterFeederLevel","data":"1","state":0,
{"name":"autoResetPressure","data":"1","state":0,
{"name":"manualResetPressure","data":"1","state":0},
{"name":"tempLimit","data":"1","state":0,
{"name":"heatEff","data":"0.00","state":2}]}
文本的格式看起来不像这样,但是用这种方式表示文本更容易理解和理解。它通常没有新行,因此随着空间不足,它自然会转到其中一行。
我希望我能简单地显示与每个“名称”和“数据”相关的数字,因为我将这些数字硬编码到了xml中,因为它们没有变化。仅将这些数字放入不同的变量中将是理想的,因此我可以简单地在xml文件中引用该变量。但是,如果有更好的方法,我很乐意提出建议!
答案 0 :(得分:1)
尝试使用循环查找“名称”,“数据”和“状态”的每个实例,并获取它们之间的值。
假设输入是字符串:
String string = "{\"sensors\":[{\"name\":\"steamTemp\",\"data\":\"181.39\",\"state\":1,\n{\"name\":\"waterTemp\",\"data\":\"-713.15\",\"state\":0,\n{\"name\":\"waterFlow\",\"data\":\"0.00\",\"state\":3,\n{\"name\":\"dieselFlow\",\"data\":\"0.00\",\"state\":2,\n{\"name\":\"manualResetLevel\",\"data\":\"1\",\"state\":0,\n{\"name\":\"waterFeederLevel\",\"data\":\"1\",\"state\":0,\n{\"name\":\"autoResetPressure\",\"data\":\"1\",\"state\":0,\n{\"name\":\"manualResetPressure\",\"data\":\"1\",\"state\":0},\n{\"name\":\"tempLimit\",\"data\":\"1\",\"state\":0,\n{\"name\":\"heatEff\",\"data\":\"0.00\",\"state\":2}]}";
Map<String, Double> map = new HashMap<>();
int index0 = 0, index1, index2;
while (true) {
// Get indices
index0 = string.indexOf("name", index0);
index1 = string.indexOf("data", index0);
index2 = string.indexOf("state", index1);
// If "name", "data", or "state" was not found
if (index0 == -1 || index1 == -1 || index2 == -1)
break;
// Get the data from the string and put it into the map
String key = string.substring(index0 + 7, index1 - 3);
Double value = Double.parseDouble(string.substring(index1 + 7, index2 - 3));
map.put(key, value);
// Update index
index0 = index2;
}
System.out.println(map);
输出:
{waterFlow=0.0, manualResetLevel=1.0, waterFeederLevel=1.0, manualResetPressure=1.0, waterTemp=-713.15, autoResetPressure=1.0, tempLimit=1.0, dieselFlow=0.0, heatEff=0.0, steamTemp=181.39}