1

http ベースの API を使用していて、いつエラーが発生したかを知りたいです。私は Android-Query (スタブ) を使用しています:

AjaxCallback<JSONObject> cb = new AjaxCallback<JSONObject>() {
        @Override
        public void callback(String url, JSONObject json, AjaxStatus status) {
            try {
                if (json != null) { 
                    if (json.getString("authenticated") != "true")
                        // An error, but status=200 and json!=null

            } catch (JSONException e) { errors... } } };

そして、私はそれを次のように使用しています:

    final AQuery aq = new AQuery(this);
    aq.ajax(url, JSONObject.class, cb);
    cb.block();

私の質問は次のとおりです。

  • ライブラリを同期的に動作させる唯一の方法はusing であることがわかりましたが、それが最善の方法であるかどうかはわかりcb.block()ません (そうではないように感じます)。
  • コールバック メソッドは例外をスローできない、何も返せない (void) などです。エラーを処理する最善の方法は何ですか? サポートしていることに気付きましたcb.getResult()が、このメソッドを呼び出すと外側のブロックが返されるようです (説明できません)。

ありがとう。

4

1 に答える 1

3

そのため、ライブラリをしばらく使用した後、同期 HTTP 要求をサポートしているように見えます。ほとんどの場合、これがベスト プラクティスではないことに同意しますが、それがまったく悪い考えであると言うのは、それを必要とする可能性のあるいくつかの条件を無視していることになります。私の場合、制御できない他のライブラリに依存していますが、これは UI スレッドから外れているため、問題ありません。

AjaxCallback<JSONObject> cb = new AjaxCallback<JSONObject>();
final AQuery aq = new AQuery(this);
cb.url(url).type(JSONObject.class);
aq.sync(cb);

JSONObject json = cb.getResult();
AjaxStatus status = cb.getStatus();
if (json != null && statusValid(status)) {
    // parse json object, throw if fails, etc.
}
于 2013-07-09T08:43:33.447 に答える