0

我在我的 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 建立了连接,但是如果出现连接问题,我将无法处理异常,而且Toast消息也不会显示在onHandleIntent中

我认为我在做什么没有任何意义,也没有逻辑。

我怎么能做到这样的事情?

4

2 回答 2

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
    }
于 2016-06-18T04:24:02.933 回答
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);
于 2016-06-18T05:54:36.130 回答