BasicNetwork.performRequest:意外响应代码401 android Volley库

BasicNetwork.performRequest:意外响应代码401 android Volley库,android,http-headers,android-volley,Android,Http Headers,Android Volley,我在android中调用web服务。因为我想调用URL,所以我没有向服务器发送任何参数,只是调用URL 但其获取错误类似于[10520]BasicNetwork.performRequest:意外响应代码401 我的代码是 RequestQueue queue = Volley.newRequestQueue(getActivity()); JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET,

我在android中调用web服务。因为我想调用URL,所以我没有向服务器发送任何参数,只是调用URL

但其获取错误类似于[10520]BasicNetwork.performRequest:意外响应代码401

我的代码是

RequestQueue queue = Volley.newRequestQueue(getActivity()); 
    JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, Server.URL, null,
            new Response.Listener<JSONObject>()
            {
                @Override
                public void onResponse(JSONObject response) {  
                                // display response    
                    hideProgressDialog();

                }
            },
            new Response.ErrorListener()
            {
                 @Override
                 public void onErrorResponse(VolleyError error) {           
                     hideProgressDialog();
               }
            }
        );

        // add it to the RequestQueue  
        queue.add(getRequest);
RequestQueue=Volley.newRequestQueue(getActivity());
JsonObjectRequest getRequest=新的JsonObjectRequest(Request.Method.GET、Server.URL、null、,
新的Response.Listener()
{
@凌驾
public void onResponse(JSONObject response){
//显示响应
hideProgressDialog();
}
},
新的Response.ErrorListener()
{
@凌驾
公共无效onErrorResponse(截击错误){
hideProgressDialog();
}
}
);
//将其添加到RequestQueue
添加(getRequest);

如何解决此问题?

HTTP 401表示该网站需要身份验证,但未提供身份验证或该网站失败。你需要证明你自己。未知您是否需要提供HTTP基本身份验证,或者Web服务是否需要特殊身份验证,并且只是巧妙地处理其返回值。

此错误意味着您需要进行身份验证。您可以通过向代码中添加getHeaders()来完成此操作,如下所示:

RequestQueue queue = Volley.newRequestQueue(getActivity()); 
JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, Server.URL, null,
        new Response.Listener<JSONObject>()
        {
            @Override
            public void onResponse(JSONObject response) {  
                // display response    
                hideProgressDialog();

            }
        },
        new Response.ErrorListener()
        {
             @Override
             public void onErrorResponse(VolleyError error) {           
                 hideProgressDialog();
           }
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> params = new HashMap<String, String>();
            params.put("Content-Type", "application/json");
            String creds = String.format("%s:%s","username","password");
            String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT);
            params.put("Authorization", auth);
            return params;
        }
    );

queue.add(getRequest);
RequestQueue=Volley.newRequestQueue(getActivity());
JsonObjectRequest getRequest=新的JsonObjectRequest(Request.Method.GET、Server.URL、null、,
新的Response.Listener()
{
@凌驾
public void onResponse(JSONObject response){
//显示响应
hideProgressDialog();
}
},
新的Response.ErrorListener()
{
@凌驾
公共无效onErrorResponse(截击错误){
hideProgressDialog();
}
}
@凌驾
公共映射getHeaders()引发AuthFailureError{
HashMap params=新的HashMap();
参数put(“内容类型”、“应用程序/json”);
String creds=String.format(“%s:%s”、“用户名”、“密码”);
字符串auth=“Basic”+Base64.encodeToString(creds.getBytes(),Base64.DEFAULT);
参数put(“授权”,auth);
返回参数;
}
);
添加(getRequest);

如果我们使用POST而不是GETGET而不是POSTMAN,则会发生此错误

所以,在这一行中更改“获取帖子”

JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, Server.URL, null, new Response.Listener<JSONObject>()
JsonObjectRequest getRequest=newjsonobjectrequest(Request.Method.GET,Server.URL,null,new Response.Listener())
字符串http\u post(){
RequestQueue MyRequestQueue=Volley.newRequestQueue(Library.this);
//String url=“http://“+”hqplayer“+”:“+Utils.password+”@“+Utils.ip+”:8088/library”;
字符串url=“http://“+Utils.ip+”:8088/library”;
Log.i(标记“HttpPost()”);
String credentials=“hqplayer:valvole”;
字节[]t=凭证。getBytes();
字节[]auth=Base64.encode(t,Base64.DEFAULT);
最终字符串basicAuthValue=新字符串(auth);
添加(新的StringRequest(Request.Method.POST,url,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
Log.i(标记“HttpPost()-onResponse()”);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.i(标记“HttpPost()-onErrorResponse()”;
Log.i(标记“HttpPost()error”);
}
}) {
@凌驾
公共映射getHeaders()引发AuthFailureError{
HashMap params=新的HashMap();
String creds=String.format(“%s:%s”、“hqplayer”、“valvole”);
字符串auth=“Basic”+Base64.encodeToString(creds.getBytes(),Base64.DEFAULT);
参数put(“授权”,auth);
返回参数;
}});
返回null;
}
添加getHeader

@Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("token", SharedVariables.TOKEN);
            headers.put("device", SharedVariables.DEVICE_ID);
            headers.put("accept-language", "en-US");
            headers.put("api-version", "1.0");
            return headers;
        }
@覆盖
公共映射getHeaders()引发AuthFailureError{
HashMap headers=新的HashMap();
headers.put(“token”,SharedVariables.token);
headers.put(“设备”,SharedVariables.device\u ID);
标题。put(“接受语言”、“en-US”);
页眉.put(“api版本”、“1.0”);
返回标题;
}

添加标题…也许您忘记了在批量请求中添加标题。

我正在使用json参数调用登录web服务,登录web服务调用后工作正常。是否有猜测???是的,这些图像需要验证请在您的回答中添加一些上下文。
@Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("token", SharedVariables.TOKEN);
            headers.put("device", SharedVariables.DEVICE_ID);
            headers.put("accept-language", "en-US");
            headers.put("api-version", "1.0");
            return headers;
        }