内部 class 与全局变量

Inner class with global variable

我想检查用户是否喜欢post,所以我写了这个函数,它需要return boolean值。任何技巧或提示将不胜感激。 非常感谢大家。

  public  boolean ImLike (String Url )
{ // Check If user Like The Post Before
    requestQueue = Volley.newRequestQueue(context);
    requestQueue.start();
    final boolean[] flag = new boolean[1];
    StringRequest request = new StringRequest(Request.Method.GET, Url, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            if (response.equals("yes")) {
               flag[0] =true;
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("Vollley Error", "Error ");
        }
    });
    requestQueue.add(request);
    Log.e("Flag",flag[0]+"");
    return flag[0];
}

这样做:

请参阅下面的编辑

创建一个侦听器接口,以便我们可以侦听我们的响应。

public interface RequestResponseListener{
    void onResponse(boolean posted);
}

修改您的方法以包含侦听器参数并利用该侦听器发送您的响应。

public void imLike (String url, final RequestResponseListener listener){ 
    requestQueue = Volley.newRequestQueue(context);
    requestQueue.start();
    StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
               listener.onResponse(response.equals("yes")));
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("Vollley Error", "Error ");
            listener.onResponse(false);
        }
    });
    requestQueue.add(request);
}

然后拨打电话并听取回应。

imLike([some_url], new RequestResponseListener(){
    @Override
    public void onResponse(boolean posted){
        // do what you wanted to do with the response
    }
});

这是Listeners背后的基本概念。它们对 multi-threading/asynchronous 任务非常有用。

编辑

我应该多看看我实际回答的内容。您正在发出 volley 请求,而 Volley 提供了自己的侦听器。你需要做的是这个。

public void imLike(String url, Response.Listener<String> listener, Response.ErrorListener errorListener){
    requestQueue = Volley.newRequestQueue(context);
    requestQueue.start();
    StringRequest request = new StringRequest(Request.Method.GET, url, listener, errorListener);
    requestQueue.add(request);
}

然后就这样提出请求

imLike([some_url], new Response.Listener<String>(){
        @Override
        public void onResponse(String response) {
            if(response.equals("yes")){
                // do what you want if it is yes
            }
            else{
                // do what you want if it is no
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
        Log.e("Volley Error", "Error ");
        }
    }
}

还请注意,您可能应该以单独的方式处理 VolleyQueue 的初始化,因为每次进行此调用时都会创建一个新队列。您的应用程序应该有一个实例,以便它实际创建一个队列。