具有全局变量的内部类

时间:2016-03-31 21:03:46

标签: android inner-classes

我想检查用户是否喜欢发帖,所以我写了这个函数,它需要返回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];
}

1 个答案:

答案 0 :(得分:2)

这样做:

请看下面的编辑

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

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背后的基本概念。它们对多线程/异步任务非常有用。

修改

我应该看看我实际上回答了什么。你正在发出一个截击请求,而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,因为每次拨打此电话时都会创建一个新队列。您的应用程序应该有一个实例,以便它实际创建一个队列。