1

APIを使用するAndroidライブラリプロジェクトを作成しています。MVCルールに従って、特定のタスクの使用を一元化するためにいくつかのプロキシを作成しました。たとえば、ログインを含むすべてのリクエスト、データ、...を処理するLoginProxyがあります。これに到達するには、LoginProxy.getInstance()。methodnameを呼び出す必要があります。ログインする場合は、プロキシでloginメソッドを呼び出す必要があります。このメソッドは、AsyncTaskを実行し、サーバーへのWebサービス呼び出しを実行します。呼び出しの応答がLoginProxyに戻ってくると、LoginProxyはイベントをディスパッチして、コンポーネント(アクティビティ)に変更を通知する必要があります。この時点で、私は独自のイベントディスパッチメカニズムを作成しました。このLoginProxyを使用するアクティビティは、変更について通知を受けるために、LoginProxyのイベントにEventListenerを追加する必要があります。LoginProxyコードを追加しました。

public class LoginProxy extends EventDispatcher implements LoginUserListener {

    private boolean loggedIn;
    private boolean loggingIn;
    private String userName;
    private UserConfiguration userConfiguration;
    private Credentials credentials; 

    private LoginProxy(){}

    /**
     * Gets a singleton instance of this class
     */
    private static LoginProxy _instance;
    public static LoginProxy getInstance(){
        if(_instance == null) {
            _instance = new LoginProxy();
        }
        return _instance;
    }

    public boolean isLoggedIn() {
        return loggedIn;
    }
    private void setLoggedIn(boolean loggedIn) {
        this.loggedIn = loggedIn;
        dispatchEvent(new GeneralEvent(GeneralEventType.LOGGED_IN_CHANGED));
    }

    public boolean isLoggingIn() {
        return loggingIn;
    }
    private void setLoggingIn(boolean loggingIn) {
        this.loggingIn = loggingIn;
        dispatchEvent(new GeneralEvent(GeneralEventType.LOGGING_IN_CHANGED));
    }

    public String getUserName() {
        return userName;
    }
    private void setUserName(String userName) {
        this.userName = userName;
    }

    public UserConfiguration getUserConfiguration() {
        return userConfiguration;
    }
    private void setUserConfiguration(UserConfiguration userConfiguration) {
        this.userConfiguration = userConfiguration;
    }

    public Credentials getCredentials() {
        return credentials;
    }
    private void setCredentials(Credentials credentials) {
        this.credentials = credentials;
    }

    public void login(String userName, String userPassword, String applicationId, String applicationPassword, String clientVersion){
        setLoggingIn(true);
        LoginUserLauncher launcher = new LoginUserLauncher(this);
        launcher.loginUser(userName, userPassword, applicationId, applicationPassword, clientVersion);
        setUserName(userName);
    }

    public void logout(){
        setUserName(null);
        setUserConfiguration(null);
        setCredentials(null);
        setLoggedIn(false);
    }

    @Override
    public void onLoginUserDone(LoginUserLauncher sender, StatusCode responseStatusCode, UserConfiguration userConfiguration, String sessionCode) {
        setLoggingIn(false);

        if(responseStatusCode == StatusCode.OK){
            setLoggedIn(true);
            setUserConfiguration(userConfiguration);
            Credentials c = new Credentials(userConfiguration.getUserID(), userConfiguration.getUserPassword(), sender.getApplicationId(), sender.getApplicationPassword(), sessionCode);
            setCredentials(c);

            dispatchEvent(new LoginEvent(LoginEventType.LOGIN_SUCCESS, responseStatusCode, this.userConfiguration));
        }else{
            setUserName(null);
            setUserConfiguration(null);
            setCredentials(null);
            setLoggedIn(false);

            dispatchEvent(new LoginEvent(LoginEventType.LOGIN_FAILED, responseStatusCode, this.userConfiguration));
        }
    }
}

これは問題なく機能すると思いますが、これらのプロキシにAndroidサービスを使用することも可能であることに気づきました。そうすれば、自作のイベントの代わりにブロードキャストを送信できます。私の質問は次のとおりです。これらのプロキシにサービスを使用しても大丈夫ですか?もしそうなら、私はバインディングのための補助インターフェースを作らなければならないと思いますか?

誰かがこの問題で私を助けることができますか?ありがとう

4

0 に答える 0