Android Studio开发News API项目Volley出现AuthFailureError如何解决
Volley调用News API抛出AuthFailureError解决方案
错误原因与对应修复方式
- API密钥有效性问题
你当前使用的apiKey大概率存在无效、过期、账号未激活、请求配额耗尽的情况。News API免费版有每日请求次数限制,超出限制后会直接返回身份验证错误。你可以先登录News API开发者后台,确认密钥状态、请求配额是否正常。 - 请求头配置缺失
News API部分接入场景要求将密钥放在请求头而非URL参数中传递,Volley默认不会携带自定义请求头,需要重写getHeaders方法添加Authorization字段。 - 日期参数超出权限范围
News API免费版仅支持查询最近30天内的新闻数据,你当前代码中写死的查询日期是2021-08-31,远超出免费版权限范围,也会触发权限类错误,需要将日期修改为最近30天内的区间。 - 网络连通性问题
如果当前网络存在防火墙拦截、代理限制,或是无法正常访问News API服务,也会触发该错误。你可以先在本地浏览器直接访问你的请求URL,确认是否能正常返回JSON数据,先解决网络连通性问题。
修改后的代码示例
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RequestQueue requestQueue; requestQueue = Volley.newRequestQueue(this); List<news_Objects> newsList = new ArrayList<>(); // 修改为最近30天内的日期,替换为你自己的有效API密钥 String url="https://newsapi.org/v2/everything?q=apple&from=2024-07-20&to=2024-08-19&sortBy=popularity"; final String API_KEY = "替换为你的有效API密钥"; // 构建JSON请求 JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { JSONArray jsonArr = response.getJSONArray("articles"); for (int i = 0; i < jsonArr.length(); i++) { JSONObject newsDetail = jsonArr.getJSONObject(i); news_Objects news = new news_Objects(); String imtUrl = newsDetail.getString("urlToImage"); String title = newsDetail.getString("title"); String detail = newsDetail.getString("description"); String newsUrl = newsDetail.getString("url"); String content = newsDetail.getString("content"); news.setNewsImageUrl(imtUrl); news.setNewsTitle(title); news.setNewsDetail(detail); news.setNewsUrl(newsUrl); news.setContent(content); newsList.add(news); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.d("fine", "Something Wrong"+error); Toast.makeText(MainActivity.this, "Something Wrong "+error, Toast.LENGTH_SHORT).show(); error.printStackTrace(); } }){ // 重写添加请求头 @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = new HashMap<>(); headers.put("Authorization", "Bearer " + API_KEY); headers.put("Content-Type", "application/json"); return headers; } }; requestQueue.add(request); } }
内容的提问来源于stack exchange,提问作者1234 Abhishek Rajput
相关产品推荐
相关产品推荐

