1

Android アプリケーションのバックエンド サービスとして parse.com を使用しています。アクティビティと解析を分離したいので、この目的のために、アクティビティと解析 (バックエンド) をブリッジするサービス クラス ウィッチを作成しました。ほとんどの解析関数は非同期であり、それらの処理方法がよくわかりません。たとえば、ユーザーでログインしたい場合は、解析ログイン関数でログインを実行するサービス オブジェクトを呼び出します。アクティビティのコードは次のとおりです。

LoginService login = new LoginService("username", "password");
login.login();
//from here it is not correct
if(login.getLoginStatus() == 2) {
   //user loggedin 
}...

私のサービスコードは次のとおりです。

public LoginSrvice(String userName, String pass) 
    {
        this.userName = userName;
        this.pass = pass;
    }

    public void loginUser() 
    {
        ParseUser.logInInBackground(userName, pass, new LogInCallback() 
        {

            @Override
            public void done(ParseUser user, ParseException e) {
                 if (user != null) {
                      logedIn = 1;
                 } else {
                      logedIn = 2;
                 }
            }
        });
    }

    public int getLoginStatus() 
    {
        return logedIn;
    }

私の質問は、どうすれば正しいですか?アクティビティとサービスの両方を分離したままにし、サービス クラスが解析からコールバックを取得するまでアクティビティの応答を待つにはどうすればよいですか。事前に助けてくれてありがとう!

4

4 に答える 4

1

Parse の API を抽象化する必要がある理由はよくわかりませんが、非常に単純なものをお勧めします。Parse の API は既にスレッド セーフを処理しているため、Parse の状態と KISS をクエリするインターフェイスを記述できます。いえ

class UserAbstraction {
  // You may find it useful to also use the callback object for other reasons.
  public static void logIn(string userName, string password) {
    ParseUser.logInInBackground(userName, password);
  }

  public static boolean isLoggedIn() {
    return ParseUser.getCurrentUser() == null;
  }
}
于 2013-05-06T17:22:05.360 に答える
1

私は Android 開発者ではありませんが、Java ではオブジェクトの wait() notifiy() メソッドを使用して、何かが起こるまで待機できます。ただし、notify() が既に呼び出された後に wait() という競合状態に入る可能性があることを考慮してください。

于 2013-05-03T14:49:41.277 に答える
1

非常によく似た質問がありましたが、Parse と iOS についてです。私が見つけた答えとともに、SOに質問をここに投稿しました。おそらく、Parse 用の JavaScript で Cloud Code を記述していることに気付くでしょう。そのためには、Promise の使い方を学ぶ必要があります。iOS で非同期性を管理するための私の解決策は、Promises を iOS に実装することでした。バックグラウンドの Parse 操作を非常にクリーンな方法でカプセル化することができました。同じトリックがうまくいくかもしれません。

私が GitHub に投稿したコードが役立つ可能性がありますが、それは Objective-C です。

-ボブ

于 2013-05-04T02:10:35.487 に答える