在我的库中处理回调
Handle callbacks in my library
我编写了一个 android 库,可以对各种网站进行网络调用和 returns 必要的内容。我正在使用 Volley 库,它具有 onResponse
和 onFailure
等回调。最初这个库是一个app,后来改成了库
当它是一个应用程序时,我可以轻松处理回调。每当回调发生时,我都会从那里调用所需的函数,但现在当我导入为库并尝试使用它时,我会在调用它时立即使用库中的控件 returns 并且回调没有做任何事情。
public void sendForVerification(final String Response, final String Secret, final String Name) {
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
flag = true;
},
new Response.ErrorListener() {
@Override
public void onErrorResponse (VolleyError error){
flag = false;
}
}}) {
@Override
protected Map<String, String> getParams () throws AuthFailureError {
HashMap<String, String> params = new HashMap<>();
params.put("secret", Secret);
params.put("response", Response);
return params;
}
};
requestQueue.add(stringRequest);
}
}
当这段代码是应用程序的一部分而不是返回标志值时,我会调用适当的函数来处理结果。现在,每当我调用这些函数时,都会在回调完成之前返回 flag 的值,这会导致一些问题。
我的问题是如何绕过回调,以便在网络调用完成时通知使用此库的应用程序?
您可以为您的库添加自己的回调
interface YourCallback<T> {
onResponse(T value);
}
public void sendForVerification(final String Response,final String Secret,final String Name, YourCallback<Boolean> callback){
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
callback.onResponse(true);
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
callback.onResponse(false);
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String,String> params = new HashMap<>();
params.put("secret",Secret);
params.put("response",Response);
return params;
}
};
requestQueue.add(stringRequest);
}
boolean flag;
api.sendForVerification("", "", "", new YourCallback<Boolean>() {
@Override
public void onResponse(Boolean value) {
flag = value;
}
});
Volley 是异步的,因此在您发送请求后任何其他即将到来的进程将照常继续,而无需等待响应。这就是为什么您的标志值看起来没有改变的原因,因为您可能在请求仍在等待响应时尝试访问它。这就是回调实现的原因:您一收到响应就采取某些操作,并且您不应该尝试处理将从另一个方法返回的值,因为它们会在更改之前返回。
我编写了一个 android 库,可以对各种网站进行网络调用和 returns 必要的内容。我正在使用 Volley 库,它具有 onResponse
和 onFailure
等回调。最初这个库是一个app,后来改成了库
当它是一个应用程序时,我可以轻松处理回调。每当回调发生时,我都会从那里调用所需的函数,但现在当我导入为库并尝试使用它时,我会在调用它时立即使用库中的控件 returns 并且回调没有做任何事情。
public void sendForVerification(final String Response, final String Secret, final String Name) {
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
flag = true;
},
new Response.ErrorListener() {
@Override
public void onErrorResponse (VolleyError error){
flag = false;
}
}}) {
@Override
protected Map<String, String> getParams () throws AuthFailureError {
HashMap<String, String> params = new HashMap<>();
params.put("secret", Secret);
params.put("response", Response);
return params;
}
};
requestQueue.add(stringRequest);
}
}
当这段代码是应用程序的一部分而不是返回标志值时,我会调用适当的函数来处理结果。现在,每当我调用这些函数时,都会在回调完成之前返回 flag 的值,这会导致一些问题。
我的问题是如何绕过回调,以便在网络调用完成时通知使用此库的应用程序?
您可以为您的库添加自己的回调
interface YourCallback<T> {
onResponse(T value);
}
public void sendForVerification(final String Response,final String Secret,final String Name, YourCallback<Boolean> callback){
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
callback.onResponse(true);
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
callback.onResponse(false);
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String,String> params = new HashMap<>();
params.put("secret",Secret);
params.put("response",Response);
return params;
}
};
requestQueue.add(stringRequest);
}
boolean flag;
api.sendForVerification("", "", "", new YourCallback<Boolean>() {
@Override
public void onResponse(Boolean value) {
flag = value;
}
});
Volley 是异步的,因此在您发送请求后任何其他即将到来的进程将照常继续,而无需等待响应。这就是为什么您的标志值看起来没有改变的原因,因为您可能在请求仍在等待响应时尝试访问它。这就是回调实现的原因:您一收到响应就采取某些操作,并且您不应该尝试处理将从另一个方法返回的值,因为它们会在更改之前返回。