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包。有需要的可以拿去用在自己的項目當中,只用一個,其他網上下載的東西,可能會有兩個依賴吧,其實并,不需要,加進去也會編譯出錯,所以只加入這也個就可以了。
總結
以上是生活随笔為你收集整理的android 全局 socket,Autobahn Android的一个应用示范和全局化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从用友软件实施项目反映出的项目管理问题
- 下一篇: GBA模拟器 My Boy!的远程连接-