You need to enable JavaScript to run this app. Android Studio中结合Volley与ListView的汇率App无法正常拉取API数据
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中结合Volley与ListView的汇率App无法正常拉取API数据

汇率展示APP数据拉取失败问题排查与修复

已定位的代码错误(直接导致数据无法展示)

  • JSON解析逻辑与接口返回结构不匹配
    你调用的api.exchangeratesapi.io/latest接口返回的rates字段为键值对格式的JSONObject,并非JSONArray。但现有代码用response.getJSONArray("rates")取值,会直接抛出JSONException,中断整个解析流程;同时循环内再次取rates字段的逻辑也和接口结构不匹配。
  • ListView未配置绑定适配器
    代码中mCurrencies.(rates)为无效语法,ListView无法直接接收字符串渲染内容,必须搭配Adapter绑定数据源,当前没有初始化任何Adapter,就算解析出数据也无法展示。

常见遗漏配置

如果未在AndroidManifest.xml中声明INTERNET网络权限,Volley会直接触发错误回调,完全无法发起网络请求。

可直接复用的修复代码

public class MainActivity extends AppCompatActivity {
    private ListView mCurrencies;
    private RequestQueue mQueue;
    // 新增:列表数据源、适配器
    private ArrayList<String> currencyShowList;
    private ArrayAdapter<String> listAdapter;

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

        mCurrencies = findViewById(R.id.currencies);
        Button button = findViewById(R.id.button);

        // 初始化列表与适配器
        currencyShowList = new ArrayList<>();
        listAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, currencyShowList);
        mCurrencies.setAdapter(listAdapter);

        mQueue = Volley.newRequestQueue(this);
        button.setOnClickListener(v -> jsonParse());
    }

    private void jsonParse() {
        String url = "https://api.exchangeratesapi.io/latest";
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                response -> {
                    try {
                        // 清空旧数据避免重复加载
                        currencyShowList.clear();
                        // 按接口结构取JSONObject类型的rates字段
                        JSONObject ratesObj = response.getJSONObject("rates");
                        // 遍历所有货币键值
                        Iterator<String> currencyKeys = ratesObj.keys();
                        while (currencyKeys.hasNext()) {
                            String code = currencyKeys.next();
                            double rate = ratesObj.getDouble(code);
                            currencyShowList.add(code + " : " + rate);
                        }
                        // 通知列表刷新数据
                        listAdapter.notifyDataSetChanged();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                },
                error -> error.printStackTrace()
        );
        mQueue.add(request);
    }
}

需补充的Manifest配置(在<application>标签同级位置添加):

<uses-permission android:name="android.permission.INTERNET" />

内容的提问来源于stack exchange,提问作者mintautas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.10 21:15:04