【问题标题】:API Call in Android Studio using volley (JAVA)使用 volley (JAVA) 在 Android Studio 中调用 API
【发布时间】:2020-05-24 17:46:21
【问题描述】:

我不确定我做错了什么。我对此很陌生,只是直接尝试进行 API 调用。我正在尝试从 rapidAPI 检索信息,以用于我正在研究的一个简单项目,以查看股票价格等。我正在使用 Android Studio 中的 volley 包进行 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);
    }
}

【问题讨论】:

    标签: java android android-studio android-volley


    【解决方案1】:

    根据您发布的内容,您确定您的x-rapidapi-keyAPIKEY。很确定这是您问题的主要原因。只有在您将有效的 API 密钥放入请求标头后,您的 API 调用才会返回正确的预期响应。

    您可以阅读如何从他们的official docs here 生成 rapidapi 密钥

    目前您在使用错误 apikey 的 api 调用中收到的响应是这样的:

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

    现在,在您的 java 代码中,您正在寻找基于键“结果”的 JSONArray,而响应当前仅返回“消息”。这就是没有发生任何事情的原因,您可以尝试查找响应消息的值并根据需要获取错误消息。生成有效的 rapidapi 密钥,然后重试,祝你好运!

    【讨论】:

      猜你喜欢
      • 2018-09-20
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 2022-01-17
      • 2022-01-13
      • 2013-07-08
      相关资源
      最近更新 更多