401 Ошибка авторизации при использовании библиотеки Volley в Android - PullRequest
0 голосов
/ 08 октября 2018

Я использую библиотеку Volley для того, чтобы интегрировал мои настройки настроек с сервером в Android Studio.Я выполняю запрос метод GET для получения значений с сервера.Но когда я пытаюсь сделать то же самое, я получаю ошибку volley, сообщающую об ошибке 401 .

I , которая также проверила мой URL в приложении POSTMAN . показал ту же ошибку 401 авторизации .

Вопрос 1: Каковы причины возникновения такой ошибки в библиотеке Volley для платформы Android?

Вопрос 2: Как ее можно решить, чтобыЗапросы на волейбол можно выполнять на платформе Android.

Код для справки:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setupActionBar();

        sharedPreferences = getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE);
        final String userid=sharedPreferences.getString(getString(R.string.saved_user_id),"");
        Toast.makeText(this, userid, Toast.LENGTH_LONG).show();
        //final String userid=NetworkHelper.get().getUserIdFromSharedPreferences();

        //sharedPreferences=getSharedPreferences(getString(R.string.preference_file_key),MODE_PRIVATE);
        //SharedPreferences.Editor editor=sharedPreferences.edit();
        //editor.clear().apply();

        //String userid=sharedPreferences.getString(getString(R.string.saved_user_id),"");

        requestQueue= Volley.newRequestQueue(this);
        String urlset=getString(R.string.url_server_base)+getString(R.string.url_users)+userid;

        JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, urlset, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {

                try {
                    //JSONArray jsonArray=jsonObject.getJSONArray("settings");

                   // for (int i=0; i<jsonArray.length();i++)
                    //{
                        JSONObject settings=jsonObject.getJSONObject("settings");

                        //retrieving values from the server

                        int eventnotifmins=settings.getInt("eventNotificationMins");
                        int alldaynotiftype=settings.getInt("allDayNotificationType");
                        int alldaynotiftimehr=settings.getInt("allDayNotificationTimeHr");
                        int alldaynotiftimemin=settings.getInt("allDayNotificationTimeMin");


                        // Feeding the values of preferences from server in Shared preferences

                        sharedPreferences=PreferenceManager.getDefaultSharedPreferences(SettingsActivity.this);
                        SharedPreferences.Editor editor1=sharedPreferences.edit();
                        editor1.putString("list_preference_1",Integer.toString(eventnotifmins));
                        editor1.putString("list_preference_2",Integer.toString(alldaynotiftype));
                        editor1.putString("list_preference_3",Integer.toString(alldaynotiftimehr));
                        editor1.apply();


                        //sBindPreferenceSummaryToValueListener
                       // this.bindPreferenceSummaryToValue();


                    //}


                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

                volleyError.printStackTrace();
                Toast.makeText(SettingsActivity.this, "Check your internet connection", Toast.LENGTH_SHORT).show();

            }
        });

        requestQueue.add(jsonObjectRequest);

    }

Заранее спасибо.

1 Ответ

0 голосов
/ 08 октября 2018

Вы можете добавить заголовок, переопределив заголовок метода getHeader() следующим образом:

JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, urlset, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {

                try {
                        JSONObject settings=jsonObject.getJSONObject("settings");

                        int eventnotifmins=settings.getInt("eventNotificationMins");
                        int alldaynotiftype=settings.getInt("allDayNotificationType");
                        int alldaynotiftimehr=settings.getInt("allDayNotificationTimeHr");
                        int alldaynotiftimemin=settings.getInt("allDayNotificationTimeMin");


                        // Feeding the values of preferences from server in Shared preferences

                        sharedPreferences=PreferenceManager.getDefaultSharedPreferences(SettingsActivity.this);
                        SharedPreferences.Editor editor1=sharedPreferences.edit();
                        editor1.putString("list_preference_1",Integer.toString(eventnotifmins));
                        editor1.putString("list_preference_2",Integer.toString(alldaynotiftype));
                        editor1.putString("list_preference_3",Integer.toString(alldaynotiftimehr));
                        editor1.apply();
                        //sBindPreferenceSummaryToValueListener
                       // this.bindPreferenceSummaryToValue();
                    //}

                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

                volleyError.printStackTrace();
                Toast.makeText(SettingsActivity.this, "Check your internet connection", Toast.LENGTH_SHORT).show();

            }
        },
        {    

// This is for Authorization  Headers you can add content type as per your needs 
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String, String> params = new HashMap<String, String>();
        params.put("Authorization", "AWS" + " " + AWSAccessKeyId + ":" + Signature);
        return params;
    });

Здесь AWSAccessKeyId и Signature вы можете получить с вашего сервера AWS .Для получения более подробной информации об аутентификации AWS перейдите по этой ссылке https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html

Я надеюсь, что эта работа для вас.

...