私は ASyncHttpClient を使用して単純な「get」を実行しており、その動作と onSuccess() 関数で正しい json 応答を提供していますが、文字列応答を変数に保存してその変数を関数に返そうとすると、常に空の文字列を返します。
コード:
public class HttpRequests
{
public String jsonString = "";
public String add_guest(String name, String id, String hardware_id)
{
AsyncHttpClient client = new AsyncHttpClient();
String url = "http://www.mysite.com/api.php?name="+name+"&id="+id+"&hardware_id="+hardware_id;
client.get(url, new JsonHttpResponseHandler()
{
@Override
public void onSuccess(JSONObject response)
{
jsonString = response.toString();
//this successfully ouputs the json response in LogCat
Log.d("response:",jsonString);
}
@Override
public void onFailure(Throwable e)
{
Log.d("http error:",e.toString());
}
});
//this returns ""
return jsonString;
}
}
onSuccess 内の jsonString が、返される jsonString と同じスコープにないかのようです。この背後にある理由は、多くの API 呼び出しがあり、それらをすべて同じクラスに保持し、必要なときに他のさまざまなクラスから呼び出して、そこから json を解析したいからです。文字列の代わりにjsonオブジェクトも返そうとしましたが、これと同じ取引です..他のクラスからは空白になります。(onSuccessで適切に設定していません)
何か案は..?
編集:
申し訳ありませんが、明確にする必要がありました。他のクラスから add_guest を呼び出しています。これは私の他のクラスからのものです:
String response = "";
HttpRequests myRequest = new HttpRequests();
response = myRequest.add_guest("bob","1","123");
add_guest を呼び出すことで、JsonHttpResponseHandler を呼び出す必要があります。これは、jsonString を応答に設定して返す必要があります..何か不足していない限り..