package activemq.xmg.com.activemq_mqtt.activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.Toast; import org.eclipse.paho.android.service.MqttAndroidClient; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import activemq.xmg.com.activemq_mqtt.R; import activemq.xmg.com.activemq_mqtt.adapter.SubcriberAdapter; import activemq.xmg.com.activemq_mqtt.bean.Message; import activemq.xmg.com.activemq_mqtt.callback.PublishCallBackHandler; import activemq.xmg.com.activemq_mqtt.callback.SubcribeCallBackHandler; import activemq.xmg.com.activemq_mqtt.event.MessageEvent; import butterknife.Bind; import butterknife.ButterKnife; public class ChatActivity extends AppCompatActivity { /**订阅*/ @Bind(R.id.ed_topic) EditText edTopic; @Bind(R.id.btn_start_sub) Button btnStartSub; /**发布*/ @Bind(R.id.ed_pub_topic) EditText edPubTopic; @Bind(R.id.ed_pub_message) EditText edPubMessage; @Bind(R.id.btn_start_pub) Button btnStartPub; /**记录*/ @Bind(R.id.lv_content) ListView lvContent; public static final String PA="PublishActivity"; private SubcriberAdapter subcriberAdapter; public String topic; private String pubTopic; private String pubMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat); ButterKnife.bind(this); setTitle("模拟服务器发布主题"); initDate(); /**1.开始订阅*/ btnStartSub.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //获取订阅的主题 topic = edTopic.getText().toString().trim(); if(topic==null||"".equals(topic)) { Toast.makeText(ChatActivity.this,"请输入订阅的主题",Toast.LENGTH_SHORT).show(); return; } String[] split = topic.split(","); /**一共有多少个主题*/ int length = split.length; String [] topics=new String[length];//订阅的主题 int [] qos =new int [length];// 服务器的质量 for(int i=0;i<length;i++){ topics[i]=split[i]; qos[i]=0; } MqttAndroidClient client = MainActivity.getMqttAndroidClientInstace(); if(client!=null){ try { if(length>1) { /**订阅多个主题,服务的质量默认为0*/ Log.d(PA,"topics="+ Arrays.toString(topics)); client.subscribe(topics, qos, null, new SubcribeCallBackHandler(ChatActivity.this)); }else{ Log.d(PA,"topic="+topic); /**订阅一个主题,服务的质量默认为0*/ client.subscribe(topic,0,null,new SubcribeCallBackHandler(ChatActivity.this)); } } catch (MqttException e) { e.printStackTrace(); } }else{ Log.e(PA,"MqttAndroidClient==null"); } } }); /**2.开始发布*/ btnStartPub.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { /**获取发布的主题*/ pubTopic = edPubTopic.getText().toString().trim(); /**获取发布的消息*/ pubMessage = edPubMessage.getText().toString().trim(); /**消息的服务质量*/ int qos=0; /**消息是否保持*/ boolean retain=false; /**要发布的消息内容*/ byte[] message=pubMessage.getBytes(); if(pubTopic!=null&&!"".equals(pubTopic)){ /**获取client对象*/ MqttAndroidClient client = MainActivity.getMqttAndroidClientInstace(); if(client!=null){ try { /**发布一个主题:如果主题名一样不会新建一个主题,会复用*/ client.publish(pubTopic,message,qos,retain,null,new PublishCallBackHandler(ChatActivity.this)); } catch (MqttException e) { e.printStackTrace(); } }else{ Log.e(PA,"MqttAndroidClient==null"); } }else{ Toast.makeText(ChatActivity.this,"发布的主题不能为空",Toast.LENGTH_SHORT).show(); } } }); } /** * 初始化数据 */ private void initDate() { List<Message> list=new ArrayList<Message>(); if(subcriberAdapter==null) { subcriberAdapter = new SubcriberAdapter(list, this); lvContent.setAdapter(subcriberAdapter); }else{ subcriberAdapter.notifyDataSetChanged(); } } /** * 运行在主线程 * @param event */ @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) { String string = event.getString(); /**接收到服务器推送的信息,显示在右边*/ if("".equals(string)){ String topic = event.getTopic(); MqttMessage mqttMessage = event.getMqttMessage(); String s = new String(mqttMessage.getPayload()); topic=topic+" : "+s; subcriberAdapter.addListDate(new Message(topic,false)); /**接收到订阅成功的通知,订阅成功,显示在左边*/ }else{ subcriberAdapter.addListDate(new Message("Me : "+string,true)); } } @Override protected void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override protected void onStop() { super.onStop(); EventBus.getDefault().unregister(this); } public static void startAction(Context context) { Intent intent = new Intent(context, ChatActivity.class); context.startActivity(intent); } }