public class getString {
String tag_string_req = "string_raq";
String url = "http://10.0.2.2/eat/locations/index.json";
String result="";
public String get_String() {
StringRequest strReq = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
result=response;
System.out.println(response);
;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
System.out.println(volleyError.getMessage());
}
});
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
return result;
}}
GetStringのオブジェクトを作成し、他のフィールドでget_Stringを呼び出します。しかし、onResponseから結果を取得するのは難しいようです。この現在の方法では機能しません。誰でもこの問題を解決するのを手伝ってもらえますか?
次のようなコールバックインターフェイスを使用します。
_public void getString(final VolleyCallback callback) {
StringRequest strReq = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
... // (optionally) some manipulation of the response
callback.onSuccess(response);
}
}...
}}
_
コールバックは次のように定義されます
_public interface VolleyCallback{
void onSuccess(String result);
}
_
アクティビティ内のコード例:
_public void onResume(){
super.onResume();
getString(new VolleyCallback(){
@Override
public void onSuccess(String result){
... //do stuff here
}
});
}
_
VolleyCallback
をより堅牢にすることもできます。処理を行う場合はジェネリック型を使用するか、start()
、failed(Exception e)
、complete()
などを追加します。もう少しきめ細かい状態チェックを行うメソッド。
これは非同期呼び出しであるため、結果を取得するとき(success()
内)にビューなどを更新する必要があります。