我需要一些帮助:))
我在我的Android应用程序上使用了凌空,我写了这些代码。
public String validateCredentials(final String email, final String password) {
StringRequest strReq = new StringRequest(com.android.volley.Request.Method.POST,
LOGIN_URL, new com.android.volley.Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject serverResponse = new JSONObject(response);
Log.d("Result: ", serverResponse.getString("result"));
responseServ = serverResponse.getString("result");
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new com.android.volley.Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put(email, password);
return params;
}
};
AppController.getInstance().addToRequestQueue(strReq);
return responseServ;
}
当我点击按钮Log.d("Result: ", serverResponse.getString("result"));
时,此代码可以正常工作,但return responseServ;
在第一次点击时不会发送任何数据。
我的按钮onClick代码是
Toast.makeText(activity, authModel.validateCredentials(email, password), Toast.LENGTH_SHORT).show();
我该如何解决这个问题?
提前致谢
答案 0 :(得分:2)
Volley是异步的,也就是你打电话,然后执行回调(Log.d()部分)。但是你也同步返回第一次为空的值,只有第二次返回值。 请记住第二次返回第一个结果。
您需要做的就是在onResponse()
PS:你想保留MVP模式,你可以 - 定义回调Interface
并将其传递给validateCredentials(final String email, final String password, final OnLoginComplete callback)
,然后传递给onResponse()
callback.loginComplete()