2016-08-20 6 views
2

私のAndroidアプリケーションでは、私はバックエンドからの読書の通路を得るための成功とエラーのコールバックを実装したいと思います。 iOS版では、それは次のようになります。Android - iOSブロックコールバックに相当するJava?

私Passage.hでは:私のPassage.mで

-(void)getPassagesWithSuccessCallback:(void (^)(NSArray<Passage *> *))success errorCallback:(void (^)(NSString *))errorString; 

を:私のAndroidアプリで

-(void)getPassagesWithSuccessCallback:(void (^)(NSArray<Passage *> *))success errorCallback:(void (^)(NSString *))errorString { 
    MyApiInterface* api = [MyApiInterface sharedInstance]; 
    [api sendGetRequestTo:@"passages" successCallback:[Passage modelListCallback:success] errorCallback:error]; 
} 

、私はへVolleyを使用しています私のAPIリクエストを処理しますが、私はさらに、継承を取得するpublic static voidメソッドを持つPassage.javaクラスを持つことで、このAPIインターフェイスをカプセル化したいと考えています。このような何か:

public static void getPassagesForFirebaseUser(FirebaseUser user, Context context) { 
     final String url = URL_BASE + "/passages.json" + "?auth=" + user.getToken(false); 
     final JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       // convert JSON into ArrayList<Passage> object 
       // pass on this array of Passages in the success completion listener of the method that called this 
       // just like iOS does success(passages) 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       // convert error to string 
       // pass on this errorString in the error completion listener of the method that called this 
       // just like iOS does error(errorString) 
      } 
     }); 
     Volley.newRequestQueue(context).add(request); 
} 

は、インプリメンテーション・フローのこの種を取得する方法はありますか?

+1

コールバックのインターフェイスを定義し、そのインスタンスを 'getPassagesForFirebaseUser()'に渡し、 'onResponse()'や 'onErrorResponse()'からコールバックのメソッドを呼び出します。 IOW、あなたは 'Response.Listener'と' Response.ErrorListener'のインスタンスを 'JsonObjectRequest'コンストラクタに渡すことで、Volleyがやっていることをまさに行います。 – CommonsWare

+0

CommonsWareに感謝します。あなたのコメントとJoa Barcenaの答えはとても役に立ちました! – Rafi

答えて

4

あなただけのコールバック(あなたがメソッドを自動生成可能性が働くIDEに依存する)の新しいインスタンスを入れて、あなたのルーチン・コードで、インターフェイス

public interface ICallbacks { 
    public void onResponse(JSONObject response); 
    public void onError(VolleyError error); 
} 

を使用することができます

public static void getPassagesForFirebaseUser(FirebaseUser user, 
Context context, ICallbacks events) { 
//here code and call ICallbacks methods 
if(result){ events.onResponse(response); } 
if(error){ events.onError(err); } 
} 

最終的にすることができますメソッドを呼び出す:

getPassagesForFirebaseUser(user, context, new ICallbacks(){ 
    @Override 
    public void onResponse(JSONObject response){ 
     //Success !!! 
    } 
    @Override 
    public void onError(VolleyError response){ 
     //Error !!! 
    } 
}); 

私の英語は申し訳ありませんが、このヘルプを願っています!

+0

例えば、 'onResponse(ArrayList passage)'と同じことをすることができます。それはうまくいくでしょうか?それはとても面白いです。私はObjective-Cを使っていて、Javaから離れすぎているようです。 – Rafi

+1

はい!あなたがすることができます!、私はどこでも使用し始めたことを聞いたときhaha –

+0

@joaありがとう!この単純な例は本当に役立ちます – ArdenDev

関連する問題