如何解决如何从 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ı","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) {
}
});
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。