AutobahnAndroid的一个应用示范和全局化

    先介绍下Autobahn Android是什么东西,简单来说,就是github上的一个开源项目,目的是在Android端实现WebSocket的协议,项目的地址在这里,看得懂源码的童鞋可以去看,地址点这里,貌似还有些发布/订阅 模式的东西在里面。

10年积累的成都网站设计、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有石狮免费网站建设让你可以放心的选择与我们合作。

    接下来说下,我要实现的目标,首先我要建立一个全局的持续连接,以保证在每个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包。有需要的可以拿去用在自己的项目当中,只用一个,其他网上下载的东西,可能会有两个依赖吧,其实并,不需要,加进去也会编译出错,所以只加入这也个就可以了。


网页标题:AutobahnAndroid的一个应用示范和全局化
URL链接:http://scyanting.com/article/jipsgj.html