具有全局变量的内部类 [英] Inner class with global variable
问题描述
我想检查用户是否喜欢帖子,因此我编写了此函数,它需要返回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屋!