Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我想设置字段值以使用Volley RequestQueue,但不使用';行不通_Android_Android Volley - Fatal编程技术网

Android 我想设置字段值以使用Volley RequestQueue,但不使用';行不通

Android 我想设置字段值以使用Volley RequestQueue,但不使用';行不通,android,android-volley,Android,Android Volley,我英语不好,所以部分使用翻译,对不起 我想使用Volley RequestQueue将字段值“result”设置为实例“result.Success”或“result.Error”。 RequestQueue在AppHelper类中声明为静态变量,并将请求对php的响应,返回“OK”或“Fail”或任何SQLException消息作为字符串 但它并不能很好地工作,具体地说,RequestQueue总是在“login”方法返回值(总是null)并结束后工作。 final static String

我英语不好,所以部分使用翻译,对不起

我想使用Volley RequestQueue将字段值“result”设置为实例“result.Success”或“result.Error”。 RequestQueue在AppHelper类中声明为静态变量,并将请求对php的响应,返回“OK”或“Fail”或任何SQLException消息作为字符串

但它并不能很好地工作,具体地说,RequestQueue总是在“login”方法返回值(总是null)并结束后工作。

final static String url = "http://60.253.14.126:8080/MyServer/Android/login_pass.php";
Result<LoggedInUser> result;

public Result<LoggedInUser> login(String username, String password) {
    result = null;
    try {
        final StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                if (response == "OK") {
                    LoggedInUser user = new LoggedInUser(java.util.UUID.randomUUID().toString(), username);
                    result = new Result.Success<>(user);
                }
                else {
                    result = new Result.Error(new IOException("Check ID or password"));
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                result = new Result.Error(error);
            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("id", username);
                params.put("pw", password);
                return params;
            }
        };

        stringRequest.setShouldCache(false);
        AppHelper.requestQueue.add(stringRequest);

        return result;
    } catch (Exception e) {
        return new Result.Error(new IOException("Error logging in", e));
    }
}
它从不起作用,陷入无限的等待。此外:

    RequestFuture<String> future = RequestFuture.newFuture();

    ...
    future.setRequest(AppHelper.requestQueue.add(stringRequest));
    future.get(3, TimeUnit.SECONDS);

    return result;
RequestFuture=RequestFuture.newFuture();
...
setRequest(AppHelper.requestQueue.add(stringRequest));
future.get(3,TimeUnit.SECONDS);
返回结果;
它只是从RequestFuture返回超时异常。我可以使用截击返回值吗?还是我用截击作为一种根本错误的方式

    RequestFuture<String> future = RequestFuture.newFuture();

    ...
    future.setRequest(AppHelper.requestQueue.add(stringRequest));
    future.get(3, TimeUnit.SECONDS);

    return result;