VolleyのonResponse関数から値を返すにはどうすればいいですか? 質問する

VolleyのonResponse関数から値を返すにはどうすればいいですか? 質問する
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 から結果を取得するのは難しいようです。現在の方法では機能しないことはわかっています。この問題を解決するために誰か助けてくれませんか?

ベストアンサー1

次のようにコールバック インターフェイスを使用します。

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()これは非同期呼び出しなので、結果が返されたら ( 内)ビューなどを更新する必要があることに注意してください。

おすすめ記事