Android Studio JSON GET Запрос Проблемы с Заголовком Авторизации - PullRequest
0 голосов
/ 15 февраля 2019

Я очень новичок в использовании android studio и у меня возникли некоторые проблемы при использовании API: https://developer.companieshouse.gov.uk/api/docs/search/companies/companysearch.html#here

Я пытаюсь отправить запрос GET для отображения JSON в текстовом представленииОднако для этого мне нужно использовать ключ авторизации, и я пытаюсь отправить запрос GET с этим.Я понимаю, что это, вероятно, дублирующий пост, однако я искал пару дней, чтобы попытаться реализовать решение, и пока не добился успеха.Ниже приведен мой код:

public class MainActivity extends AppCompatActivity {
    private TextView txtResult;
    private RequestQueue queue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        queue = Volley.newRequestQueue(this);
        txtResult = findViewById(R.id.txtResult);
        Button buttonParse = findViewById(R.id.btnSearch);
        buttonParse.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                jsonParse();
            }
        });
    }

    private void jsonParse(){
        String url = "https://api.companieshouse.gov.uk/search/companies?q=tesco&items_per_page=1000&start_index=0";
        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 companies = jsonArray.getJSONObject(i);
                        String title = companies.getString("address_snippet");
                        txtResult.append(title);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        }) {
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                String credentials = "MY_KEY";
                String base64EncodedCredentials = Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
                HashMap<String, String> headers = new HashMap<>();
                headers.put("Authorization", "Basic " + base64EncodedCredentials);
                return headers;
            }
        };
        queue.add(request);
    } 
}

Пример тела ответа JSON:

{
  "kind": "search#companies",
  "page_number": 1,
  "start_index": 0,
  "items": [
    {
      "address_snippet": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA",
      "address": {
        "postal_code": "AL7 1GA",
        "locality": "Welwyn Garden City",
        "country": "United Kingdom",
        "address_line_1": "Kestrel Way",
        "premises": "Tesco House, Shire Park"
      },
      "company_type": "plc",
      "company_status": "active",
      "kind": "searchresults#company",

https://developer.companieshouse.gov.uk/api/docs/index/gettingStarted/apikey_authorisation.html

Если это поможет, в приведенном выше документе объясняется, как отправитьключ API (я не могу понять это).В тот момент, когда кнопка нажата, она ничего не делает (я полагаю, из-за проблемы авторизации, не позволяющей приложению получить JSON), и я действительно буду признателен за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...