java - Volley 在第一次调用方法时返回 null

标签 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,
                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;
}

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

最佳答案

您可以使用回调来返回 Volley 响应:

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);
    }
}
}}

创建接口(interface):

public interface VolleyCallback{
    void onSuccess(String response);
}

并从 Activity 中获取结果:

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

关于java - Volley 在第一次调用方法时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49757340/

相关文章:

java - 在 WebView [Android Studio] [Java] 中允许麦克风访问(权限)

java - 在 ViewRootImpl.java 中创建线程

vbscript - 在 VBScript 中检索 Cookie 和发送 Cookie 和发布变量

android - Android中的圆圈语音动画

java - 如何舍入 Double 数据类型值

javascript - scrapy没有检测到html元素,但它在源页面上可见

http - 可以执行 "relative"使 HTTP header 过期吗?

java - 在 OAuth 2.0 安全 Web 应用程序上使用 JMeter 脚本进行性能测试

java - 更新 ListView 时如何更新 ListView 项目位置

java - JPA 2 + Criteria API + 获取子查询中最旧的元素