Volley中的AuthFailureError

时间:2018-09-26 13:03:16

标签: java android api android-volley

我想从开放式街道地图API中使用 当我向排球发送反向地理编码Api请求时 显示此错误

com.android.volley.authfailureerror

但是此API不需要任何令牌

这是我的代码:

 String url = "https://nominatim.openstreetmap.org/reverse?format=json&lat="+lat+"&lon="+lng;
    Response.Listener<JSONObject> listener = new Response.Listener<JSONObject>()
    {
        @Override
        public void onResponse(JSONObject response)
        {


            try
            {
                JSONObject address = response.getJSONObject("address");
                final String city = address.getString("town");
                final String county =  address.getString("county");        
                selectcity = true;
                String temp = county.substring(county.indexOf(" "),county.length());
                ed.putString("lat", lat+"");
                ed.putString("lng", lng+"");
                ed.putString("location", temp);
                ed.apply();
                progressDialog.dismiss();
                RequestQueue mRequestQueue;
                mRequestQueue =AppController.getInstance().getRequestQueue();
                mRequestQueue.cancelAll("AppController");
                locationManager.removeUpdates(LocationActivity.this);
            }
            catch (JSONException e)
            {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), "Erorr", Toast.LENGTH_LONG).show();
                RequestQueue mRequestQueue;
                mRequestQueue =AppController.getInstance().getRequestQueue();
                mRequestQueue.cancelAll("AppController");
                progressDialog.dismiss();
                locationManager.removeUpdates(LocationActivity.this);
            }

        }
    };

    Response.ErrorListener errorListener = new Response.ErrorListener()
    {
        @Override
        public void onErrorResponse(VolleyError error)
        {
            Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_LONG).show();
            RequestQueue mRequestQueue;
            mRequestQueue =AppController.getInstance().getRequestQueue();
            mRequestQueue.cancelAll("AppController");
            progressDialog.dismiss();
            locationManager.removeUpdates(LocationActivity.this);
        }
    };

    final JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, listener, errorListener){
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            headers.put("accept-language", "fa");
            return headers;
        }
    };
    request.setTag("AppController");
    AppController.getInstance().addToRequestQueue(request);

另外,当我在邮递员中使用此URL时,它正常工作

1 个答案:

答案 0 :(得分:0)

尝试这种方式

RequestQueue requestQueue = Volley.newRequestQueue(mContext);
    StringRequest stringRequest = new StringRequest(Request.Method.GET, Your_URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
          //response
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("===","onErrorResponse  "+error)
        }
    }) {
        @Override
        public String getBodyContentType() {
            return "application/json; charset=utf-8";
        }

        @Override
        public byte[] getBody() throws AuthFailureError {
            try {
               Log.d("===","AuthFailureError");
            } catch (UnsupportedEncodingException uee) {

                VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", requestBody, "utf-8");
                return null;
            }
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("Content-Type", "application/json");


            return params;
        }

        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            String responseString = "";
            if (response != null) {
                responseString = String.valueOf(response.statusCode);
                // can get more details such as response.headers
                try {

                } catch (Exception e) {

                }
            }
            return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
        }
    };
    stringRequest.setRetryPolicy(new RetryPolicy() {
        @Override
        public int getCurrentTimeout() {
            return 50000;
        }

        @Override
        public int getCurrentRetryCount() {
            return 50000;
        }

        @Override
        public void retry(VolleyError error) throws VolleyError {

        }
    });
    requestQueue.add(stringRequest);