loopJ AsyncHttpClient onFinish または onSuccess または onFailure で取得した応答を返す方法を探しています。今のところ、私はこのコードを持っています:
**jsonParse.java file**
public class jsonParse {
static JSONObject jObj = null;
static String jsonString = "";
AsyncHttpClient client;
public JSONObject getJSONObj() {
RequestParams params;
params = new RequestParams();
params.add("username", "user");
params.add("password", "password");
client = new AsyncHttpClient();
client.post("http://example.com", params, new TextHttpResponseHandler() {
@Override
public void onSuccess(int i, Header[] headers, String response) {
jsonString = response;
Log.d("onSuccess: ", jsonString);
}
@Override
public void onFailure(int statusCode, Header[] headers, String response, Throwable e) {
if (statusCode == 401) {
jsonString = response;
Log.d("onFailure: ", jsonString);
}
}
});
try {
jObj = new JSONObject(jsonString);
} catch (JSONException e) {
Log.e("Exception", "JSONException " + e.toString());
}
return jObj;
}
}
コードを呼び出すと:
JSONParser jsonParser = new JSONParser();
jsonParser.getJSONFromUrl();
onSuccess または onFailure メソッドが http 投稿を終了する前に、 JSONExceptionを取得します。
最初の呼び出しで、次のことに気付きました: Log.e("Exception", "JSONException " + e.toString()); ログに記録されてから Log.d("onSuccess: ", jsonString); 同期状態にあるため、値をログに記録します。
2 回目の呼び出し: jObj = new JSONObject(jsonString); 正常に実行され、メソッドの目的の戻り値が得られます。これは、その時点までに onSuccess メソッドが既に値を変数 jsonString に割り当てているためです。
今私がまさに探しているのは、メソッドからの jObj の早期復帰を防ぐ方法です。
メソッドgetJSONObjを作成し、AsyncHttpClientタスクの完了を待ち、変数をjsonStringに割り当て、JSONObjectを作成して返す方法はありますか?
前もって感謝します!乾杯!