Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.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
Java 在方法的第一次调用中,Volley返回null_Java_Android_Http Headers_Android Volley - Fatal编程技术网

Java 在方法的第一次调用中,Volley返回null

Java 在方法的第一次调用中,Volley返回null,java,android,http-headers,android-volley,Java,Android,Http Headers,Android Volley,我试图使用volley从服务器检索数据,但当我第一次调用此方法时,我从服务器获得响应,但该方法返回null。如果我第二次叫它,我会得到最后的回应 public String retrieveDataFromServer(String url, String param, final String token){ StringRequest stringRequest = new StringRequest(Request.Method.GET, url,

我试图使用volley从服务器检索数据,但当我第一次调用此方法时,我从服务器获得响应,但该方法返回null。如果我第二次叫它,我会得到最后的回应

 public String retrieveDataFromServer(String url, String param, final String token){


        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try{
                            data =  new JSONObject(response).toString();
                        }catch (Exception e){}
                        //Toast.makeText(getApplicationContext(), "wow" + data, Toast.LENGTH_SHORT).show();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        try{
                            data = new JSONObject(error.toString()).toString();
                        }catch (Exception e){}
                        //Toast.makeText(getApplicationContext(), "" +data, Toast.LENGTH_SHORT).show();
                    }
                }) {
            /**
             * Passing some request headers
             */
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                String bearer = "Bearer ".concat(token);
                Map<String, String> headersSys = super.getHeaders();

                HashMap<String, String> headers = new HashMap<String, String>();
                headers.put("Content-Type", "application/json; charset=utf-8");
                //headers.put("token", token);

                headersSys.remove("Authorization");
                headers.put("Authorization", bearer);
                headers.putAll(headersSys);
                return headers;
            }
        };
        // Adding request to request queue
        addToRequestQueue(stringRequest);
        //Toast.makeText(getApplicationContext(), "wow" + data, Toast.LENGTH_SHORT).show();

        return data;
}
公共字符串retrieveDataFromServer(字符串url、字符串参数、最终字符串标记){
StringRequest StringRequest=新的StringRequest(Request.Method.GET,url,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
试一试{
data=新的JSONObject(response).toString();
}捕获(例外e){}
//Toast.makeText(getApplicationContext(),“wow”+数据,Toast.LENGTH\u SHORT.show();
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
试一试{
数据=新的JSONObject(error.toString()).toString();
}捕获(例外e){}
//Toast.makeText(getApplicationContext(),“”+数据,Toast.LENGTH_SHORT).show();
}
}) {
/**
*传递一些请求头
*/
@凌驾
公共映射getHeaders()引发AuthFailureError{
字符串bearer=“bearer”.concat(令牌);
Map headersSys=super.getHeaders();
HashMap headers=新的HashMap();
headers.put(“内容类型”、“应用程序/json;字符集=utf-8”);
//headers.put(“token”,token);
校长系统移除(“授权”);
标题。put(“授权”,持票人);
headers.putAll(headersSys);
返回标题;
}
};
//将请求添加到请求队列
addToRequestQueue(stringRequest);
//Toast.makeText(getApplicationContext(),“wow”+数据,Toast.LENGTH\u SHORT.show();
返回数据;
}

如何在方法的第一次调用时获得响应?

您可以使用callback返回截击响应:

public void retrieveDataFromServer(final VolleyCallback callback) {
StringRequest strReq = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        callback.onSuccess(response);
    }
}
}}
并从活动中获得结果:

String yourString = "";
@override
public void onResume() {
    super.onResume();
    retrieveDataFromServer(new VolleyCallback(){
        @Override
        public void onSuccess(String response){
          //Get result from here
             yourString = response;
        }
    });
}

很可能是因为函数在从截取回调中填充
数据之前结束。必须在回调后获取数据
String yourString = "";
@override
public void onResume() {
    super.onResume();
    retrieveDataFromServer(new VolleyCallback(){
        @Override
        public void onSuccess(String response){
          //Get result from here
             yourString = response;
        }
    });
}