android - 具有全局变量的内部类

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

最佳答案

这样做:

请参阅下面的编辑

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

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

关于android - 具有全局变量的内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36343737/

相关文章:

java - 在 main 方法中实例化内部类

android - 协程流程 : Not sure how to convert a Cursor to this method's return type

android - CollapsingToolbarlayout 中的工具栏问题

Android倒数计时器解释通缉令

android - 如何对方法进行单元测试,当它在 android 中有处理程序时

java - Lambda vs 匿名内部类性能 : reducing the load on the ClassLoader?

java - Android 上的滑动导航示例?

android - 服务中的 IntentService

java - 如何在scala中使用java代理

java - 使用匿名内部类 - 添加监听器和传递实例时发生冲突