android 全局 socket,Autobahn Android的一个应用示范和全局化

先介绍下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 Map map = 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包。有需要的可以拿去用在自己的项目当中,只用一个,其他网上下载的东西,可能会有两个依赖吧,其实并,不需要,加进去也会编译出错,所以只加入这也个就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值