必须在不同的活动中调用单例 socketIO 类?

Posted

技术标签:

【中文标题】必须在不同的活动中调用单例 socketIO 类?【英文标题】:Have to call singleton socketIO class in different activities? 【发布时间】:2014-09-26 05:52:03 【问题描述】:

我正在使用 gottox-socket.io 库进行套接字编程。我为套接字创建了单例类。我可以在主要活动中调用它,但我无法在其他活动中调用它......这是我的单例类......

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

        
    );



 

我还使用抽象类来获取从单例类到活动的 json 响应。这是我的抽象类

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

    

【问题讨论】:

【参考方案1】:

您是否考虑过在帮助程序包(例如 com.project.name.helpers)中创建一个 GlobalClass 并从那里调用它。喜欢

public class GlobalClass extends Activity 
    public static SocketIOClient socket = new SocketIOClient();

然后您可以在导入 GlobalClass 后从您的活动中调用它,因为它是一个静态的并且已经创建的类,例如:

import com.project.name.helpers;
public SomeActivity extends Activity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        try
            GlobalClass.socket.initInstance();
        
        catch
        
    

【讨论】:

以上是关于必须在不同的活动中调用单例 socketIO 类?的主要内容,如果未能解决你的问题,请参考以下文章

单例模式和工厂模式

单例模式

单例模式的五种实现方法

从非活动单例类获取应用程序上下文

java 实现线程安全的单例模式

JS单例模式