Не могу понять, как работает аутентификация заголовка при синтаксическом анализе Json

#android #json #authentication #android-volley

#Android #json #аутентификация #android-volley

Вопрос:

Я пытаюсь получить некоторые данные из онлайн-API через Json, но не могу понять, как работает аутентификация, поскольку я никогда не делал этого раньше. Это не пара пользователь-пароль, а на основе уникального ключа. Curl выглядит следующим образом:

curl -X GET —header ‘Accept: application /json’ —заголовок «авторизация: на предъявителя [уникальный ключ]» ‘url к объекту Json’

Больше ничего не пробовал, поскольку я новичок в реализации json на Java. Список не загружается, и я получаю следующее в logcat:

E / Volley: [31231] BasicNetwork.performRequest: неожиданный код ответа 403 для URL

 public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private PlayerListAdapter mAdapter;
private ArrayList<PlayerListItem> mPlayerList;
private RequestQueue mRequestQueue;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mRecyclerView = findViewById(R.id.playerList);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

    mPlayerList = new ArrayList<>();

    mRequestQueue = Volley.newRequestQueue(this);
    parseJson();
}

private void parseJson() {
    String url = getString(R.string.url_to_members);

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONArray jsonArray = response.getJSONArray("items");

                        for (int i = 0; i < jsonArray.length(); i  ) {
                            JSONObject players = jsonArray.getJSONObject(i);

                            String playerName = players.getString("name");
                            String playerRole = players.getString("role");
                            int playerTrophies = players.getInt("trophies");
                            int playerDonations = players.getInt("donations");

                            mPlayerList.add(new PlayerListItem(playerName, playerRole, playerTrophies, playerDonations));
                        }

                        mAdapter = new PlayerListAdapter(MainActivity.this, mPlayerList);
                        mRecyclerView.setAdapter(mAdapter);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    }) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headers = new HashMap<>();
            String apiToken = "Bearer"   Base64.encodeToString(getString(R.string.api_key).getBytes(), Base64.NO_WRAP);
            headers.put("Accept:", "application/json");
            headers.put("authorization:", "Bearer "   apiToken);
            return headers;
        }
    };

    mRequestQueue.add(request);
}
}
  

Комментарии:

1. удалите : из каждого заголовка key

2. например, попробуйте Accept вместо Accept:

3. и вы уже добавляете Bearer в свою apiToken переменную, нет необходимости добавлять ее снова при вводе в заголовок

4. Все еще получаю ту же ошибку. Пробовал просто удалять двоеточия и Bearer также удалять.

5. отладьте свой код и извлеките эти заголовки и попробуйте сначала вызвать api в postman или каком-либо другом инструменте тестирования api