在Android的所有活动单socket.IO连接 [英] Single socket.IO connection for all activities in android

查看:206
本文介绍了在Android的所有活动单socket.IO连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经通过<创建的单例类SocketIOClient参考href="http://stackoverflow.com/questions/13709783/android-socket-io-switch-activities-without-lost-connection/17606768#17606768">here.服务器相连接。我可以能够从活动发送请求SocketIOClient。但我怎么能得到活性的单例类的反应?

I have created Singleton class for SocketIOClient reference by here. Server was connected. I can able to send request from activity to SocketIOClient. But how can I get response from Singleton class in Activity?

下面我的活动:

import java.net.MalformedURLException;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends Activity {
    EditText uname, passwd;
    Button login;
    JSONObject json;
    SocketIOClient socket;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    socket = new SocketIOClient();
    try {
        SocketIOClient.initInstance();
    } catch (MalformedURLException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    json = new JSONObject();
    uname = (EditText) findViewById(R.id.unameED);
    passwd = (EditText) findViewById(R.id.passwdED);
    login = (Button) findViewById(R.id.loginButton);
    login.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            try {
                json.put("username", uname.getText().toString().trim());
                json.put("password", passwd.getText().toString().trim());
              //request send to server    
                SocketIOClient.emit("login_request", json);

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    });

}

} 

也是我的Singleton类有()方法:

Also My Singleton Class have on() method:

        @Override
        public void on(String event, IOAcknowledge ack, Object... args) {
            JSONArray jarr_args = new JSONArray();
            JSONObject jobj_in = new JSONObject();
            if (event.equals("registration_status")) {
                jarr_args.put(args[0]);
                try {
                    jobj_in = jarr_args.getJSONObject(0);
                    Log.d("Result", jobj_in.getString("result"));
                    if (jobj_in.getString("result").equals("success")) {

                    } else {
                        Log.d("check:", "username and password");

                    }
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

下面Singleton类可以从服务器的响应。但我想知道,如何让我的行为有何反应?

Here Singleton class can get response from server. But I want to know,how to get the response in my activity?

推荐答案

创建一个抽象类,像这样

Create an abstract class like this

public abstract class ResponseHandler 
{
    private Context context;

    public abstract void execute (JSONObject jsonObject) throws JSONException;

    public ResponseHandler (Context ctx)
    {
        this.context = ctx;
    }

    public void handleObject(JSONObject jsonObject) throws Exception
    {
        execute(jsonObject);

    }
}

在你的活动 当调用套接字类,通过ResponseHadler也作为参数 例如:

Inside your activity While calling socket class, pass the ResponseHadler also as a parameter Example:

SocketIOClient.initInstance(your parameters, new ResponseHandler(this)
{
    //ResponseHandler have an abstract method called execute(). So you are overriding it here
    @Override
    public void execute(JSONObject jsonObject) throws JSONException
    {
        // Here you will get your JSONObject passed from socket class
    }
}

和您的插座类中

public class YourSocketClass
{
private ResponseHandler handler;

public static void initInstance(your parameter, ResponseHandler responseHandler)
{
    this.handler = responseHandler;

    // Do your operations here      
}

@Override
public void on(String event, IOAcknowledge ack, Object... args) 
{
    JSONArray jarr_args = new JSONArray();
    JSONObject jobj_in = new JSONObject();
    if (event.equals("registration_status")) 
    {
        jarr_args.put(args[0]);
        try 
        {
            jobj_in = jarr_args.getJSONObject(0);
            Log.d("Result", jobj_in.getString("result"));
            if (jobj_in.getString("result").equals("success")) 
            {
                //If you want to pass your jsonobject from here to activity
                //Do something like this
                handler.handleObject(jobj_in);
            } 
            else 
            {
                Log.d("check:", "username and password");
            }
        } 
        catch (JSONException e) 
        {
            e.printStackTrace();
        }
    }
}
}

这篇关于在Android的所有活动单socket.IO连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆