如何传递Api连接对象并在不同的活动中使用它

时间:2016-06-18 04:01:32

标签: java android mikrotik

我在我的android项目中使用Mikrotik Java API

我想要实现的目标是:

  • 使用信息登录
  • 将连接存储在后台
  • 在所有活动中使用该连接,在不同活动中共享ApiConnection以使用它,例如来自任何活动的con.login() con.execute()

我是登录表单,提交后,它会发送信息并启动intentService,我会建立连接

@Override
protected void onHandleIntent(Intent intent) {
    try {
        try {
            String host = intent.getStringExtra("host");
            String username = intent.getStringExtra("username");
            String password = intent.getStringExtra("password");

            ApiConnection con = ApiConnection.connect(host);
            con.login(username, password);

            // Connected

        } catch (Exception e) {
            // Exception
        }
    } catch (Exception e) {
        // Exception
    }
}

我成功地从该intentService建立了连接,但是如果存在连接问题,我无法处理异常,{em> onHandleIntent中也没有Toast消息显示

我认为我所做的事情没有任何意义,也没有逻辑。

我怎么能实现这样的目标?

2 个答案:

答案 0 :(得分:0)

尝试在获取连接的主活动中将con对象声明为静态,然后根据您的要求在任何地方使用它,

见下面的结构,

在主要活动中

   public static ApiConnection con;

获取连接

    con = ApiConnection.connect(host);

在主要活动中创建一个获取此连接的方法,如下所示

   public static ApiConnection getCon()
    {
        if(con != null)
           return con;
         else
           return null;
    }

现在通过以下代码

在任何活动中使用此对象
   ApiConnection con = = MainActivity.getCon();
   if(con != null)
    {
       // Use Your Logic Here
    }

答案 1 :(得分:0)

@Amr SubZero我没有api设置,所以我只是创建了这个类来解释你的流程。

import android.util.Log;

/**
 * Created by Wasim on 18-06-2016.
 */
public class SingletonApiConnection {

    private static final String TAG = "SingletonApiConnection";

    private static SingletonApiConnection apiInstance = null;

    private SingletonApiConnection() {
    }

    public SingletonApiConnection(String host) {
        apiInstance.connect(host);
        Log.d(TAG, "Object Created.");
    }

    public static SingletonApiConnection getInstance(String host) {

        if (null == apiInstance) {
            apiInstance = new SingletonApiConnection(host);
        }

        return apiInstance;
    }
}

意图服务

public class NetworkRequestService extends IntentService {

    /**
     * Creates an IntentService.  Invoked by your subclass's constructor.
     *
     * @param name Used to name the worker thread, important only for debugging.
     */
    public NetworkRequestService(String name) {
        super(name);
    }

    @Override
    protected void onHandleIntent(Intent intent) {

        // get object with host
        String host = intent.getStringExtra("host");
        SingletonApiConnection connection = SingletonApiConnection.getInstance(host);

        String username = intent.getStringExtra("username");
        String password = intent.getStringExtra("password");

        // now call login
        connection.login(username, password);

        // now use this at any class it will have loggedin instance b'z it is singleton.

    }
}

登录

Intent networkService = new Intent(LoginActivity.this, NetworkRequestService.class);
// add intent parameters here
startService(networkService);