新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
先介绍下Autobahn Android是什么东西,简单来说,就是github上的一个开源项目,目的是在Android端实现WebSocket的协议,项目的地址在这里,看得懂源码的童鞋可以去看,地址点这里,貌似还有些发布/订阅 模式的东西在里面。
为偃师等地区用户提供了全套网页设计制作服务,及偃师网站建设行业解决方案。主营业务为成都网站设计、网站制作、偃师网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!接下来说下,我要实现的目标,首先我要建立一个全局的持续连接,以保证在每个Activity中,都能调用它的发送数据的方法
WebSocketUitls.webSocketConnection.sendTextMessage(jsonObject.toString());
当然另一点就是,在发送数据后,能在接收返回数据的时能在当前的上下文环境当中执行相应的方法
@Override public void mySystemMethod(JSONObject json){ try { System.out.println(json.get("data") + "_LoginPage"); userName = (EditText)findViewById(R.id.userName); userName.setText(json.get("data").toString()); } catch (JSONException e) { e.printStackTrace(); } }
------------------------------------分割线------------------------------------------------
首先,我定义了一个工具类,将WebSocket连接对象进行全局化,并定义一个继承了MyWebSocketHandler接口的伪处理类,并在全局的返回数据的 public void onTextMessage(String payload)中调用,这样当其他Activity类,new MyWebSocketHandler时,便可以替换onTextMessage中的方法,以实现回调的效果
public class WebSocketUitls{ public static String WS = "ws://ip地址:端口号"; public static WebSocketConnection webSocketConnection; public static WebSocketHandler webSocketHandler; static { webSocketConnection = new WebSocketConnection(); webSocketHandler = new WebSocketHandler(){ //websocket接受返回数据的方法 @Override public void onTextMessage(String payload) { super.onTextMessage(payload); //调用自定义方法中的mySystemMethod,当其他Activity中重置他的时候就会完成替换 JSONObject jsonObject; try { jsonObject = new JSONObject(payload); //要替换的方法 myHandler.mySystemMethod(jsonObject); } catch (JSONException e) { e.printStackTrace(); } } }; try { webSocketConnection.connect(WS,webSocketHandler); } catch (WebSocketException e) { e.printStackTrace(); } } //定义一个初始的全局类 public static MyWebSocketHandler myHandler = new MyWebSocketHandler(){ @Override public void mySystemMethod(JSONObject json) { //TODO 并没什么卵用。这个方法只是占个位置,以方便以后替代 } }; }
public class LoginPage extends AppCompatActivity{ private EditText userName; @Override protected void onResume() { super.onResume(); //将新的方法传递给myHandler这全局的处理方法 WebSocketUitls.myHandler = new LoginHandler(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login_page); Button login_btn = (Button)findViewById(R.id.LOGIN_IN); login_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Mapmap = new HashMap (); map.put("type","XXXXXXXXX"); map.put("name","111111"); map.put("password", "111111"); final JSONObject jsonObject = new JSONObject(map); //组合数据,这是websocket的请求参数 WebSocketUitls.webSocketConnection.sendTextMessage(jsonObject.toString()); } }); } //实现一个内部类,同时实现MyWebSocketHandler这个接口, class LoginHandler implements MyWebSocketHandler{ //实现这个方法,以替换全局的处理方法 @Override public void mySystemMethod(JSONObject json){ try { System.out.println(json.get("data") + "_LoginPage"); userName = (EditText)findViewById(R.id.userName); userName.setText(json.get("data").toString()); } catch (JSONException e) { e.printStackTrace(); } } } }
public interface MyWebSocketHandler { public void mySystemMethod(JSONObject json); }
--------------------------------------分割线----------------------------------------------
可能说的不太有条理, 毕竟能力有限,有哪位大神用过这个东西,有自己的见解的可以在留言中提出来。
另附上autobahn-0.5.0.jar包。有需要的可以拿去用在自己的项目当中,只用一个,其他网上下载的东西,可能会有两个依赖吧,其实并,不需要,加进去也会编译出错,所以只加入这也个就可以了。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。