#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