Android Volley onResponse 不执行 :(
Android Volley onResponse does not execute :(
我想检查用户是否存在和 return 结果,但是 onResponse() 在 returning isUserExist 之前没有实现,有人可以建议如何修复吗? :)
// Check existence of email address
private boolean verifyEmail(String email) {
isUserExist = false;
loginURL = Uri.parse(loginURL).buildUpon()
.appendQueryParameter("email",email)
.build().toString();
GsonRequest<StaffUser> gsonRequest = new GsonRequest<StaffUser>(loginURL, StaffUser.class, null,
new Response.Listener<StaffUser>() {
@Override
public void onResponse(StaffUser response) {
if (response != null) {
Log.i(TAG, "staffUserId: " + response.getStaffUserId());
isUserExist = true;
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO: Handle error
Log.e(TAG, "VolleyError: " + error);
}
}
);
// Access the RequestQueue through your singleton class.
MySingleton.getInstance(this).addToRequestQueue(gsonRequest);
return isUserExist;
}
您必须使用 listener
进行响应检测
因为 Volly
是 异步的
https://developer.android.com/training/volley
- 强大的排序功能可以轻松正确地填充您的 UI
从网络异步获取的数据。
所以你必须使用listener
句柄responce
看看怎么做
public class MyCustomListnerObject {
// Step 1 - This interface defines the type of messages I want to communicate to my owner
public interface MyCustomObjectListener {
// These methods are the different events and
// need to pass relevant arguments related to the event triggered
public void onObjectReady(String title);
// or when data has been loaded
public void onDataLoaded(SomeData data);
}
private MyCustomObjectListener listener;
// Constructor where listener events are ignored
public MyCustomObject() {
// set null or default listener or accept as argument to constructor
this.listener = null;
}
// Assign the listener implementing events interface that will receive the events
public void setCustomObjectListener(MyCustomObjectListener listener) {
this.listener = listener;
}
}
那么你的 Volly
// Check existence of email address
private void verifyEmail(String email) {
isUserExist = false;
loginURL = Uri.parse(loginURL).buildUpon()
.appendQueryParameter("email",email)
.build().toString();
GsonRequest<StaffUser> gsonRequest = new GsonRequest<StaffUser>(loginURL, StaffUser.class, null,
new Response.Listener<StaffUser>() {
@Override
public void onResponse(StaffUser response) {
if (response != null) {
Log.i(TAG, "staffUserId: " + response.getStaffUserId());
if (listener != null)
listener.onDataLoaded(data); // <---- fire listener here
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO: Handle error
listener.onDataLoaded(data); // <---- fire listener here
Log.e(TAG, "VolleyError: " + error);
}
}
);
// Access the RequestQueue through your singleton class.
MySingleton.getInstance(this).addToRequestQueue(gsonRequest);
}
How to create a proper Volley Listener for cross class Volley method calling
您必须创建接口并将监听器传递给在回调方法中提供验证响应的 verifyEmail 方法。
添加回调接口
public interface VerifyEmailListner {
void onResponse(boolean success);
}
像这样改变你的方法,设置 void return 类型而不是 boolean
private void verifyEmail(String email,final VerifyEmailListner listner) {
isUserExist = false;
loginURL = Uri.parse(loginURL).buildUpon()
.appendQueryParameter("email",email)
.build().toString();
GsonRequest<StaffUser> gsonRequest = new GsonRequest<StaffUser>(loginURL, StaffUser.class, null,
new Response.Listener<StaffUser>() {
@Override
public void onResponse(StaffUser response) {
if (response != null) {
Log.i(TAG, "staffUserId: " + response.getStaffUserId());
listner.onResponse(true);
isUserExist = true;
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO: Handle error
Log.e(TAG, "VolleyError: " + error);
listner.onResponse(false);
isUserExist = false;
}
}
);
// Access the RequestQueue through your singleton class.
MySingleton.getInstance(this).addToRequestQueue(gsonRequest);
}
像这样调用方法
verifyEmail("abc@gmail.com",new VerifyEmailListner () {
public void onResponse(boolean success){
if(success){
// verified
} else{
// not verified
}
}
});
我想检查用户是否存在和 return 结果,但是 onResponse() 在 returning isUserExist 之前没有实现,有人可以建议如何修复吗? :)
// Check existence of email address
private boolean verifyEmail(String email) {
isUserExist = false;
loginURL = Uri.parse(loginURL).buildUpon()
.appendQueryParameter("email",email)
.build().toString();
GsonRequest<StaffUser> gsonRequest = new GsonRequest<StaffUser>(loginURL, StaffUser.class, null,
new Response.Listener<StaffUser>() {
@Override
public void onResponse(StaffUser response) {
if (response != null) {
Log.i(TAG, "staffUserId: " + response.getStaffUserId());
isUserExist = true;
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO: Handle error
Log.e(TAG, "VolleyError: " + error);
}
}
);
// Access the RequestQueue through your singleton class.
MySingleton.getInstance(this).addToRequestQueue(gsonRequest);
return isUserExist;
}
您必须使用 listener
进行响应检测
因为 Volly
是 异步的
https://developer.android.com/training/volley
- 强大的排序功能可以轻松正确地填充您的 UI 从网络异步获取的数据。
所以你必须使用listener
句柄responce
看看怎么做
public class MyCustomListnerObject {
// Step 1 - This interface defines the type of messages I want to communicate to my owner
public interface MyCustomObjectListener {
// These methods are the different events and
// need to pass relevant arguments related to the event triggered
public void onObjectReady(String title);
// or when data has been loaded
public void onDataLoaded(SomeData data);
}
private MyCustomObjectListener listener;
// Constructor where listener events are ignored
public MyCustomObject() {
// set null or default listener or accept as argument to constructor
this.listener = null;
}
// Assign the listener implementing events interface that will receive the events
public void setCustomObjectListener(MyCustomObjectListener listener) {
this.listener = listener;
}
}
那么你的 Volly
// Check existence of email address
private void verifyEmail(String email) {
isUserExist = false;
loginURL = Uri.parse(loginURL).buildUpon()
.appendQueryParameter("email",email)
.build().toString();
GsonRequest<StaffUser> gsonRequest = new GsonRequest<StaffUser>(loginURL, StaffUser.class, null,
new Response.Listener<StaffUser>() {
@Override
public void onResponse(StaffUser response) {
if (response != null) {
Log.i(TAG, "staffUserId: " + response.getStaffUserId());
if (listener != null)
listener.onDataLoaded(data); // <---- fire listener here
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO: Handle error
listener.onDataLoaded(data); // <---- fire listener here
Log.e(TAG, "VolleyError: " + error);
}
}
);
// Access the RequestQueue through your singleton class.
MySingleton.getInstance(this).addToRequestQueue(gsonRequest);
}
How to create a proper Volley Listener for cross class Volley method calling
您必须创建接口并将监听器传递给在回调方法中提供验证响应的 verifyEmail 方法。
添加回调接口
public interface VerifyEmailListner {
void onResponse(boolean success);
}
像这样改变你的方法,设置 void return 类型而不是 boolean
private void verifyEmail(String email,final VerifyEmailListner listner) {
isUserExist = false;
loginURL = Uri.parse(loginURL).buildUpon()
.appendQueryParameter("email",email)
.build().toString();
GsonRequest<StaffUser> gsonRequest = new GsonRequest<StaffUser>(loginURL, StaffUser.class, null,
new Response.Listener<StaffUser>() {
@Override
public void onResponse(StaffUser response) {
if (response != null) {
Log.i(TAG, "staffUserId: " + response.getStaffUserId());
listner.onResponse(true);
isUserExist = true;
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO: Handle error
Log.e(TAG, "VolleyError: " + error);
listner.onResponse(false);
isUserExist = false;
}
}
);
// Access the RequestQueue through your singleton class.
MySingleton.getInstance(this).addToRequestQueue(gsonRequest);
}
像这样调用方法
verifyEmail("abc@gmail.com",new VerifyEmailListner () {
public void onResponse(boolean success){
if(success){
// verified
} else{
// not verified
}
}
});