日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

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

發(fā)布時(shí)間:2023/12/29 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 全局 socket,Autobahn Android的一个应用示范和全局化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

先介紹下Autobahn Android是什么東西,簡(jiǎn)單來(lái)說(shuō),就是github上的一個(gè)開(kāi)源項(xiàng)目,目的是在Android端實(shí)現(xiàn)WebSocket的協(xié)議,項(xiàng)目的地址在這里,看得懂源碼的童鞋可以去看,地址點(diǎn)這里,貌似還有些發(fā)布/訂閱 模式的東西在里面。

接下來(lái)說(shuō)下,我要實(shí)現(xiàn)的目標(biāo),首先我要建立一個(gè)全局的持續(xù)連接,以保證在每個(gè)Activity中,都能調(diào)用它的發(fā)送數(shù)據(jù)的方法WebSocketUitls.webSocketConnection.sendTextMessage(jsonObject.toString());

當(dāng)然另一點(diǎn)就是,在發(fā)送數(shù)據(jù)后,能在接收返回?cái)?shù)據(jù)的時(shí)能在當(dāng)前的上下文環(huán)境當(dāng)中執(zhí)行相應(yīng)的方法@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();

}

}

------------------------------------分割線------------------------------------------------

首先,我定義了一個(gè)工具類(lèi),將WebSocket連接對(duì)象進(jìn)行全局化,并定義一個(gè)繼承了MyWebSocketHandler接口的偽處理類(lèi),并在全局的返回?cái)?shù)據(jù)的 ?public void onTextMessage(String payload)中調(diào)用,這樣當(dāng)其他Activity類(lèi),new MyWebSocketHandler時(shí),便可以替換onTextMessage中的方法,以實(shí)現(xiàn)回調(diào)的效果public?class?WebSocketUitls{

public?static?String?WS?=?"ws://ip地址:端口號(hào)";

public?static?WebSocketConnection?webSocketConnection;

public?static?WebSocketHandler?webSocketHandler;

static?{

webSocketConnection?=?new?WebSocketConnection();

webSocketHandler?=?new?WebSocketHandler(){

//websocket接受返回?cái)?shù)據(jù)的方法

@Override

public?void?onTextMessage(String?payload)?{

super.onTextMessage(payload);

//調(diào)用自定義方法中的mySystemMethod,當(dāng)其他Activity中重置他的時(shí)候就會(huì)完成替換

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();

}

}

//定義一個(gè)初始的全局類(lèi)

public?static??MyWebSocketHandler?myHandler??=?new?MyWebSocketHandler(){

@Override

public?void?mySystemMethod(JSONObject?json)?{

//TODO?并沒(méi)什么卵用。這個(gè)方法只是占個(gè)位置,以方便以后替代

}

};

}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);

//組合數(shù)據(jù),這是websocket的請(qǐng)求參數(shù)

WebSocketUitls.webSocketConnection.sendTextMessage(jsonObject.toString());

}

});

}

//實(shí)現(xiàn)一個(gè)內(nèi)部類(lèi),同時(shí)實(shí)現(xiàn)MyWebSocketHandler這個(gè)接口,

class?LoginHandler?implements?MyWebSocketHandler{

//實(shí)現(xiàn)這個(gè)方法,以替換全局的處理方法

@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);

}

--------------------------------------分割線----------------------------------------------

可能說(shuō)的不太有條理, 畢竟能力有限,有哪位大神用過(guò)這個(gè)東西,有自己的見(jiàn)解的可以在留言中提出來(lái)。

另附上autobahn-0.5.0.jar包。有需要的可以拿去用在自己的項(xiàng)目當(dāng)中,只用一個(gè),其他網(wǎng)上下載的東西,可能會(huì)有兩個(gè)依賴吧,其實(shí)并,不需要,加進(jìn)去也會(huì)編譯出錯(cuò),所以只加入這也個(gè)就可以了。

總結(jié)

以上是生活随笔為你收集整理的android 全局 socket,Autobahn Android的一个应用示范和全局化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。