91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Autobahn Android的一個應用示范和全局化

發布時間:2020-06-17 16:12:50 來源:網絡 閱讀:2732 作者:不會笑 欄目:移動開發

    先介紹下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<String,String> map = new HashMap<String,String>();
                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包。有需要的可以拿去用在自己的項目當中,只用一個,其他網上下載的東西,可能會有兩個依賴吧,其實并,不需要,加進去也會編譯出錯,所以只加入這也個就可以了。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德令哈市| 库车县| 临西县| 开化县| 嘉善县| 内江市| 政和县| 封丘县| 呈贡县| 运城市| 河曲县| 富阳市| 如皋市| 光泽县| 明星| 昌宁县| 从化市| 光山县| 怀集县| 西平县| 扎兰屯市| 曲阳县| 田林县| 余姚市| 武宣县| 大理市| 游戏| 祁门县| 林芝县| 尚志市| 泸西县| 青龙| 海原县| 康马县| 大邑县| 广安市| 榆中县| 墨江| 思南县| 拉萨市| 原阳县|