Java 保存RequestQueue响应的最佳方法是什么?

Java 保存RequestQueue响应的最佳方法是什么?,java,php,android,Java,Php,Android,全部。第一次在这里发布 无论如何,我编写了一个Android方法,它创建一个RequestQueue,并通过一个PHP脚本向我的服务器发送一个请求,以获取服务器时间。我的方法确实有效,但我几乎可以肯定这是陪审团操纵的代码,必须有更好的方法 底线:我想将onResponse响应保存到可以返回的字符串时间中(时间在更改为ArrayList之前是字符串)。但是,它不允许我使用来自外部onResponse的字符串,除非它是final。当然这意味着我不能把它改成回应 我想我做错了。也许有更好的方法从PHP

全部。第一次在这里发布

无论如何,我编写了一个Android方法,它创建一个RequestQueue,并通过一个PHP脚本向我的服务器发送一个请求,以获取服务器时间。我的方法确实有效,但我几乎可以肯定这是陪审团操纵的代码,必须有更好的方法

底线:我想将onResponse响应保存到可以返回的字符串时间中(时间在更改为ArrayList之前是字符串)。但是,它不允许我使用来自外部onResponse的字符串,除非它是final。当然这意味着我不能把它改成回应

我想我做错了。也许有更好的方法从PHP脚本获得响应

Android方法:

    public static String getServerTime(Context c){
    //Make a final ArrayList that will hold response once received
    final ArrayList<String> time = new ArrayList<String>();
    //Set up the RequestQueue
    RequestQueue requestQueue = Volley.newRequestQueue(c);
    String requestUrl = c.getString(R.string.uploadServerUrl)+c.getString(R.string.serverRequestPath);
    Response.Listener responseListener = new Response.Listener<String>() { @Override public void onResponse(String response) { time.add(response.toString()); System.out.println("onResponse: "+response.toString());}};
    Response.ErrorListener errorListener = new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) {System.out.println("onErrorResponse: "+error.toString());}};
    StringRequest request = new StringRequest(Request.Method.POST, requestUrl, responseListener, errorListener){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> parameters = new HashMap<String, String>();
            parameters.put("option", "0");
            return parameters;
        }
    };
    RetryPolicy retryPolicy = new RetryPolicy(){
        @Override public int getCurrentTimeout() {
            return 50000;
        }
        @Override public int getCurrentRetryCount() {
            return 50000;
        }
        @Override public void retry(VolleyError error) throws VolleyError {}
    };
    request.setRetryPolicy(retryPolicy);
    requestQueue.add(request);
    return time.remove(0);
}
公共静态字符串getServerTime(上下文c){
//制作一个最终的ArrayList,它将在收到响应后保存响应
最终ArrayList时间=新建ArrayList();
//设置请求队列
RequestQueue RequestQueue=Volley.newRequestQueue(c);
String requestUrl=c.getString(R.String.uploadServerUrl)+c.getString(R.String.serverRequestPath);
Response.Listener responseListener=new Response.Listener(){@Override public void onResponse(String Response){time.add(Response.toString());System.out.println(“onResponse:+Response.toString());};
Response.ErrorListener ErrorListener=new Response.ErrorListener(){@Override public void onErrorResponse(截击错误){System.out.println(“onErrorResponse:+error.toString());};
StringRequest=新的StringRequest(request.Method.POST、requestUrl、responseListener、errorListener){
@凌驾
受保护的映射getParams()引发AuthFailureError{
映射参数=新的HashMap();
参数。看跌期权(“期权”、“0”);
返回参数;
}
};
RetryPolicy RetryPolicy=新RetryPolicy(){
@重写公共int getCurrentTimeout(){
返回50000;
}
@重写公共int getCurrentRetryCount(){
返回50000;
}
@重写公共无效重试(截击错误)引发截击错误{}
};
request.setRetryPolicy(retryPolicy);
添加(请求);
返回时间。删除(0);
}
PHP脚本:

<?php
if(isset($_POST["option"])){
    $option = $_POST["option"];
    switch($option){

        case 0:
            date_default_timezone_set ("America/Chicago");
            $time = time();
            echo(date("Y;m;d;H;i;s", $time));


    }
}
    else{
        echo "No option set!";
    }

将字符串时间变量声明为类中的一个字段,而不是方法中的一个变量。但是,您希望这种方式起作用的方式永远不会起作用,您的方法getServerTime永远不会返回onResponse中返回的时间,因为截击请求是异步的。@Wukash您的建议起作用了。非常感谢。除了截击,我什么都不会用。你建议我做些什么?截击很好。