Autobahn Android的一个应用示范和全局化
先介绍下Autobahn Android是什么东西,简单来说,就是github上的一个开源项目,目的是在Android端实现WebSocket的协议,项目的地址在这里,看得懂源码的童鞋可以去看,地址点这里,貌似还有些发布/订阅 模式的东西在里面。
接下来说下,我要实现的目标,首先我要建立一个全局的持续连接,以保证在每个Activity中,都能调用它的发送数据的方法
WebSocketUitls.webSocketConnection.sendTextMessage(jsonObject.toString());
当然另一点就是,在发送数据后,能在接收返回数据的时能在当前的上下文环境当中执行相应的方法
@OverridepublicvoidmySystemMethod(JSONObjectjson){try{System.out.println(json.get("data")+"_LoginPage");userName=(EditText)findViewById(R.id.userName);userName.setText(json.get("data").toString());}catch(JSONExceptione){e.printStackTrace();}}
------------------------------------分割线------------------------------------------------
首先,我定义了一个工具类,将WebSocket连接对象进行全局化,并定义一个继承了MyWebSocketHandler接口的伪处理类,并在全局的返回数据的 public void onTextMessage(String payload)中调用,这样当其他Activity类,new MyWebSocketHandler时,便可以替换onTextMessage中的方法,以实现回调的效果
publicclassWebSocketUitls{publicstaticStringWS="ws://ip地址:端口号";publicstaticWebSocketConnectionwebSocketConnection;publicstaticWebSocketHandlerwebSocketHandler;static{webSocketConnection=newWebSocketConnection();webSocketHandler=newWebSocketHandler(){//websocket接受返回数据的方法@OverridepublicvoidonTextMessage(Stringpayload){super.onTextMessage(payload);//调用自定义方法中的mySystemMethod,当其他Activity中重置他的时候就会完成替换JSONObjectjsonObject;try{jsonObject=newJSONObject(payload);//要替换的方法myHandler.mySystemMethod(jsonObject);}catch(JSONExceptione){e.printStackTrace();}}};try{webSocketConnection.connect(WS,webSocketHandler);}catch(WebSocketExceptione){e.printStackTrace();}}//定义一个初始的全局类publicstaticMyWebSocketHandlermyHandler=newMyWebSocketHandler(){@OverridepublicvoidmySystemMethod(JSONObjectjson){//TODO并没什么卵用。这个方法只是占个位置,以方便以后替代}};}
publicclassLoginPageextendsAppCompatActivity{privateEditTextuserName;@OverrideprotectedvoidonResume(){super.onResume();//将新的方法传递给myHandler这全局的处理方法WebSocketUitls.myHandler=newLoginHandler();}@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_login_page);Buttonlogin_btn=(Button)findViewById(R.id.LOGIN_IN);login_btn.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){finalMap<String,String>map=newHashMap<String,String>();map.put("type","XXXXXXXXX");map.put("name","111111");map.put("password","111111");finalJSONObjectjsonObject=newJSONObject(map);//组合数据,这是websocket的请求参数WebSocketUitls.webSocketConnection.sendTextMessage(jsonObject.toString());}});}//实现一个内部类,同时实现MyWebSocketHandler这个接口,classLoginHandlerimplementsMyWebSocketHandler{//实现这个方法,以替换全局的处理方法@OverridepublicvoidmySystemMethod(JSONObjectjson){try{System.out.println(json.get("data")+"_LoginPage");userName=(EditText)findViewById(R.id.userName);userName.setText(json.get("data").toString());}catch(JSONExceptione){e.printStackTrace();}}}}
publicinterfaceMyWebSocketHandler{publicvoidmySystemMethod(JSONObjectjson);}
--------------------------------------分割线----------------------------------------------
可能说的不太有条理, 毕竟能力有限,有哪位大神用过这个东西,有自己的见解的可以在留言中提出来。
另附上autobahn-0.5.0.jar包。有需要的可以拿去用在自己的项目当中,只用一个,其他网上下载的东西,可能会有两个依赖吧,其实并,不需要,加进去也会编译出错,所以只加入这也个就可以了。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。