内部 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 的初始化,因为每次进行此调用时都会创建一个新队列。您的应用程序应该有一个实例,以便它实际创建一个队列。
我想检查用户是否喜欢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 的初始化,因为每次进行此调用时都会创建一个新队列。您的应用程序应该有一个实例,以便它实际创建一个队列。