java - 如何从 Paho MQTT 消息中解析 JSON
问题描述
编辑我已经使用 Volley 添加了 pars 函数。这是功能代码:
private void pars(){
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, String.valueOf(txt), null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray jsonArray = response.getJSONArray("employees");
for(int i = 0; i<jsonArray.length(); i++){
JSONObject employee = jsonArray.getJSONObject(i);
String firstName = employee.getString("firstname");
int age = employee.getInt("age");
String mail = employee.getString("mail");
txt.append(firstName + ", " + String.valueOf(age) + ", " + mail + "\n\n");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
mQueue.add(request);}
如您所见,我为 URL 端编写了“String.valueOf(txt)。但它现在不起作用。”添加此 txt 代码后,新的 Response.Listener() 变为灰色。
---------编辑结束----
我在解析来自 MQTT 的 JSON 数据时遇到问题。我正在使用 PAHO MQTT 服务器连接和订阅我在 android studio 中的主机和主题。
我正在使用 textInput 获取用户想要订阅的主题数据,就像这样:
topic = topicInput.getEditText().getText().toString();
订阅主题后,我将在 TextView 中显示消息,方法如下:
txt.setText(new String(message.getPayload()));
这些代码适用于从 MQTT 获取消息。但是,当我从 mqtt 推送 JSON 数据时,我的 textView 不显示解析的数据。我怎样才能解析这个字符串?我搜索了每个网站,他们通常使用普通的 url 来解析 json 数据。但是有一些不同的问题。我没有“正常”的网址,我有一个主题。
我怎样才能做到这一点?
这是我的 MainActivity.java 的完整代码:
public class MainActivity extends AppCompatActivity {
private Button btn1;
private Button btn2;
private TextView txt;
private static final String TAG="MyTag";
private MqttAndroidClient client;
private TextInputLayout topicInput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);
txt = (TextView)findViewById(R.id.txt);
topicInput = (TextInputLayout) findViewById(R.id.topicInput);
String clientId = MqttClient.generateClientId();
final MqttAndroidClient client =
new MqttAndroidClient(MainActivity.this, "tcp://broker.mqttdashboard.com:1883",
clientId);
//Connection
btn1.setOnClickListener(new View.OnClickListener() {
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
@Override
public void onClick(View v) {
try {
IMqttToken token = client.connect();
token.setActionCallback(new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
Toast.makeText(MainActivity.this, "MQTT Bağlantısı Kuruldu", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
Toast.makeText(MainActivity.this, "MQTT Bağlantısı BAŞARISIZ!", Toast.LENGTH_SHORT).show();
}
});
} catch (MqttException e) {
e.printStackTrace();
}
}
});
//Subscribe settings
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String topic;
topic = topicInput.getEditText().getText().toString();
int qos = 1;
try {
IMqttToken subToken = client.subscribe(topic, qos);
subToken.setActionCallback(new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
Toast.makeText(MainActivity.this, "Topic'e Bağlanıldı", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(IMqttToken asyncActionToken,
Throwable exception) {
Toast.makeText(MainActivity.this, "Topic'e Bağlantı Kurulamadı", Toast.LENGTH_SHORT).show();
}
});
} catch (MqttException e) {
e.printStackTrace();
}
}
});
//Text
client.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable cause) {
}
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
txt.setText(new String(message.getPayload()));
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
}
});
}
}
解决方案
推荐阅读
- java - 流畅地从嵌套的 JSONObject 中获取密钥
- jakarta-ee - 有没有办法在不使用 struts 配置的情况下通过 web.xml 更改 Struts 2 扩展?
- kotlin - RxJava2 - 范围()与区间()
- java - 从 Firebase 实时数据库中检索数据到 ListView
- sql - 如何在 spark sql 滞后函数中添加 if 或 case 条件
- azure-devops - 使用 Azure DevOps 和 App Center 增加 Android 应用程序的构建和版本号
- python - 均方误差未正确计算
- python - 如果每次任务要求发生变化,如何运行管道?
- node.js - 是否有任何解决方案可以防止每次在不使用 RedisStore 的情况下执行服务器重启时快速会话丢失?
- c# - 如何提高 IIS 并发请求限制?