You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何通过国家名称获取对应首都?

嘿,作为Android新手能做出触摸地图获取国家名称的功能,已经超棒啦!关于通过国家名称获取对应首都的问题,这里有几个实用的方案,你可以根据需求选择:

方案一:本地预存国家-首都映射(离线可用)

这种方式不需要网络,响应速度快,适合需要离线功能的场景。你可以用HashMap直接存数据,数据量多的话也可以放进SQLite数据库里。

举个简单的HashMap示例:

// 初始化国家与首都的映射表,你可以补充更多国家数据
HashMap<String, String> countryCapitalMap = new HashMap<>();
countryCapitalMap.put("China", "Beijing");
countryCapitalMap.put("United States", "Washington, D.C.");
countryCapitalMap.put("Japan", "Tokyo");

// 从Intent里拿到之前传递的国家名称
String selectedCountry = getIntent().getStringExtra("selected_country");
// 获取对应首都
String capital = countryCapitalMap.get(selectedCountry);

if (capital != null) {
    // 成功获取到首都,直接展示即可
    textViewCapital.setText(capital);
} else {
    // 处理找不到首都的情况,比如提示用户
    textViewCapital.setText("暂未查询到该首都信息");
}

不过这种方式需要你手动维护完整的国家数据,如果你需要覆盖大部分国家,可以找一份现成的国家-首都列表导入进去。

方案二:调用地理信息API(需要网络)

如果不想维护本地数据,也可以通过免费的地理信息API来查询首都。这种方式数据更新及时,但需要网络权限,还要处理网络请求的异常。

以OkHttp为例,简单的请求示例如下:

// 首先在AndroidManifest.xml添加网络权限
// <uses-permission android:name="android.permission.INTERNET"/>

OkHttpClient client = new OkHttpClient();
String selectedCountry = getIntent().getStringExtra("selected_country");
// 注意对国家名称进行URL编码,避免特殊字符导致请求失败
String encodedCountry = URLEncoder.encode(selectedCountry, "UTF-8");
// 这里替换成你选择的API地址(比如一些提供国家信息的免费API)
String url = "https://your-api-url.com/get-capital?country=" + encodedCountry;

Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        // 请求失败,比如网络断开,在主线程提示用户
        runOnUiThread(() -> {
            Toast.makeText(MainActivity.this, "网络请求失败", Toast.LENGTH_SHORT).show();
        });
        e.printStackTrace();
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        if (response.isSuccessful()) {
            String responseData = response.body().string();
            // 根据API返回的JSON结构解析首都
            // 假设返回的JSON是 {"country":"China", "capital":"Beijing"}
            JSONObject jsonObject = new JSONObject(responseData);
            String capital = jsonObject.getString("capital");

            // 回到主线程更新UI
            runOnUiThread(() -> {
                textViewCapital.setText(capital);
            });
        } else {
            runOnUiThread(() -> {
                Toast.makeText(MainActivity.this, "未查询到该国家信息", Toast.LENGTH_SHORT).show();
            });
        }
    }
});

使用API时要注意查看其使用条款,有些免费API有请求次数限制,另外建议用国家代码(比如address.getCountryCode()获取的CN、US)来替代国家名称作为请求参数,这样能避免不同语言下国家名称不一致的问题,查询更准确。

小提醒
  • 不管用哪种方式,都要处理空值情况,比如找不到对应首都时给用户友好提示;
  • 如果用API,记得处理网络异常和请求失败的场景,别让APP崩溃;
  • 用国家代码查询比国家名称更可靠,因为国家代码是国际统一标准,不会有翻译差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:02:14