2017-03-22 9 views
0

私が書いているAndroidアプリでは、多くのアプリが特定のAPIに対するWebリクエストを実行します。データの形式が同じになるので、毎回書き直すのではなく、すべての要求を実行する多くの機能を集中化したいと考えました。コールバック関数の折り返し

は例えば、私は、私は、Web要求を行うたびにルーチンチェック同じエラー行います

JSONObject jo = new JSONObject(response); 
boolean success = jo.getBoolean("success"); 
if(success) { 
    //Do work 
} else { 
    //Display error 
} 

私の考えは、このResponse.Listenerを実装するクラスのいくつかの並べ替えすることでしたが、私は判断できませんでしたエラーなどの効果的な処理方法。私の質問はコールバックで繰り返し機能を実行する簡単な方法はありますか?私はエレガントなソリューションを探していますが、必ずしも最も簡単なソリューションではありません。

答えて

1

これは、1つまたは2つのインターフェイスをメソッドに渡すことで実現できますが、面倒です。 Java 8ではラムダが用意されているため、コールバックを使った作業がはるかに洗練されています。アンドロイドでラムダを使用するには、retrolambda使用することができます。https://github.com/orfjackal/retrolambda

あなたの一般的な方法は、あなたがこのように、この方法で使用することになり、この

parseResponse(String response, 
       Consumer<JSONObject> successConsumer, 
       Consumer<String> errorConsumer) { 
    JSONObject jo = new JSONObject(response); 
    boolean success = jo.getBoolean("success"); 
    if(success) { 
    successConsumer.accept(jo); 
    } else { 
    errorConsumer.accept("error"); 
    } 
} 

次のようになります。

class MyClass { 
    void onResponse(String response) { 
     .... 
     parseResponse(response, this::handleData, this::handleError); 
    } 

    void handleData(JSONObject object) {....} 
    void handleError(String object) {....} 

} 
関連する問題