具有全局变量的内部类 [英] Inner class with global variable

查看:112
本文介绍了具有全局变量的内部类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想检查用户是否喜欢帖子,因此我编写了此函数,它需要返回boolean值.任何技巧或提示将不胜感激. 非常感谢大家.

I want to check if the user liked post or not, so I wrote this function and it needs to return boolean value. Any trick or hint would be appreciated. Thanks so much, everyone.

  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];
}

推荐答案

执行以下操作:

请在下面查看编辑内容

创建一个侦听器界面,以便我们可以侦听我们的响应.

Create a listener interface so we can listen for our response.

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

修改您的方法以包括一个侦听器参数,并利用该侦听器发送您的响应.

Modify your method to include a listener parameter and utilize that listener to send your response.

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);
}

然后拨打电话并收听回复.

Then to make the call and listen for a response.

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

这是Listeners背后的基本概念.它们对于多线程/异步任务非常有用.

This is the basic concept behind Listeners. They are very useful for multi-threading/asynchronous tasks.

编辑

我应该查看一下我实际上在回答的内容.您正在发出截击请求,而截击提供了自己的侦听器.您需要做的就是这个.

I should have looked at what I was actually answering a bit more. You are making a volley request, and Volley provides its own listeners. What you need to do is this.

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的初始化,因为每次进行此调用时都会创建一个新队列.您应该为您的应用程序创建一个实例,以便它实际上创建一个队列.

It is also noted that you should probably handle initializing your VolleyQueue in a separate way, as you are creating a new queue every time you make this call. You should have a single instance for your application so that it actually creates a queue.

这篇关于具有全局变量的内部类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆