Вызов API в Android Studio с использованием залпа (JAVA) - PullRequest
1 голос
/ 09 февраля 2020

Я не уверен, что я делаю неправильно. Я очень новичок в этом и просто прыгнул прямо в попытке сделать вызовы API. Я пытаюсь получить информацию из rapidAPI для простого проекта, над которым я работаю, чтобы увидеть цены акций и так далее. Я использую пакет залпа из Android Studio, чтобы мои API-вызовы извлекали JSON и пытаюсь поместить это в textView. Я думаю, что это работает, когда я нажимаю кнопку, а затем, когда на нее нажимают, она запускает код для получения информации и затем показывает ответ в textView. однако при нажатии кнопки ничего не происходит. нет ошибок или ответов любого рода.


    private TextView mTextViewResult;
    private RequestQueue mQueue;


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

        mTextViewResult= findViewById(R.id.text_view_result);
        Button buttonParse= findViewById(R.id.button_parse);

        mQueue= Volley.newRequestQueue(this);

        buttonParse.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                jsonParse();
            }
        });

    }
    private void jsonParse(){
      String url="https://apidojo-yahoo-finance-v1.p.rapidapi.com/market/get-quotes?region=CA&lang=en&symbols=VEQT.TO";
        JsonObjectRequest request= new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONArray jsonArray= response.getJSONArray("result");

                    JSONObject result=jsonArray.getJSONObject(0);
                    int marketPrice= result.getInt("regularMarketPrice");

                    mTextViewResult.setText(String.valueOf(marketPrice));

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

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                mTextViewResult.setText("" +error.toString());
            }


        }){
            @Override
            public Map<String,String> getHeaders() throws AuthFailureError{
                Map<String,String> params= new HashMap<>();
                params.put("x-rapidapi-host", "apidojo-yahoo-finance-v1.p.rapidapi.com");
                params.put("x-rapidapi-key", "APIKEY");
                return params;
            }
        };
        mQueue.add(request);
    }
}

1 Ответ

0 голосов
/ 09 февраля 2020

Из того, что вы написали, вы уверены, что x-rapidapi-key - APIKEY. Я уверен, что это основная причина вашей проблемы. Только после того, как вы добавите действительный ключ API в заголовок запроса, ваш вызов API вернет правильный ожидаемый ответ.

Вы можете прочитать, как сгенерировать ключ quickapi из их официальных документов, здесь

В настоящее время ответ, который вы получаете на вызов API с использованием неправильного API, выглядит примерно так:

{
   "message": "Key doesn't exists"
}

Теперь в вашем коде java вы ищете JSONArray на основе ключа ". ", в то время как в ответе в настоящее время возвращается только" сообщение ". По этой причине ничего не происходит, вы можете попытаться найти значение в ответе на сообщение и получить сообщения об ошибках, если вы sh. Создайте действительный ключ quickapi и попробуйте еще раз, удачи!

...