两次点击后,Volley onResponse工作

时间:2017-03-05 20:54:27

标签: java android android-volley

我需要一些帮助:))

我在我的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();

我该如何解决这个问题?

提前致谢

1 个答案:

答案 0 :(得分:2)

Volley是异步的,也就是你打电话,然后执行回调(Log.d()部分)。但是你也同步返回第一次为空的值,只有第二次返回值。 请记住第二次返回第一个结果。

您需要做的就是在onResponse()

中完成所有工作

PS:你想保留MVP模式,你可以 - 定义回调Interface并将其传递给validateCredentials(final String email, final String password, final OnLoginComplete callback),然后传递给onResponse() callback.loginComplete()