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
相关产品推荐
相关产品推荐

