簡體   English   中英

使用 volley (JAVA) 在 Android Studio 中調用 API

[英]API Call in Android Studio using volley (JAVA)

我不確定我做錯了什么。 我對此很陌生,只是直接嘗試進行 API 調用。 我正在嘗試從 RapidAPI 檢索信息,用於我正在處理的一個簡單項目,以查看股票價格等。 我正在使用 Android Studio 中的 volley 包使我的 APIcalls 檢索 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);
    }
}

根據您發布的內容,您確定您的x-rapidapi-keyAPIKEY 很確定這是您問題的主要原因。 只有在您的請求標頭中放入有效的 API 密鑰后,您的 API 調用才會返回正確的預期響應。

您可以在此處閱讀如何從他們的官方文檔中生成 Rapidapi 密鑰

目前,您在使用錯誤的 apikey 調用 api 時收到的響應是這樣的:

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

現在,在您的 Java 代碼中,您正在尋找基於鍵“result”的 JSONArray,而響應當前僅返回“message”。 這就是什么都沒發生的原因,您可以嘗試查找響應消息的值,並根據需要獲取錯誤消息。 生成一個有效的 Rapidapi 密鑰並重試,祝你好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM