显示国家及其调用代码,但使用Android XML返回其缩写代码

显示国家及其调用代码,但使用Android XML返回其缩写代码,android,xml,country-codes,Android,Xml,Country Codes,我正在尝试从androidxml开发一个注册屏幕。正如在每一份登记表中一样,我需要显示国家名单。我可以使用strings.xml文件中的字符串数组来实现这一点 问题的主要部分在于,当用户选择一个国家时,其下方的电话号码字段应首先填入其各自的国家代码,该代码可能是可编辑的,也可能是不可编辑的。在这里,我的问题是如何在选择国家时获取国家代码。我需要使用数据库吗?还是可以使用xml本身实现 此外,当用户提交登记表时,我必须发送国家的缩写代码,而不是完整的国家名称。现在,这同样需要数据库或xml 我的应

我正在尝试从androidxml开发一个注册屏幕。正如在每一份登记表中一样,我需要显示国家名单。我可以使用strings.xml文件中的字符串数组来实现这一点

问题的主要部分在于,当用户选择一个国家时,其下方的电话号码字段应首先填入其各自的国家代码,该代码可能是可编辑的,也可能是不可编辑的。在这里,我的问题是如何在选择国家时获取国家代码。我需要使用数据库吗?还是可以使用xml本身实现

此外,当用户提交登记表时,我必须发送国家的缩写代码,而不是完整的国家名称。现在,这同样需要数据库或xml

我的应用程序到目前为止还没有使用数据库,所以使用数据库来实现这个目的就不太好了。此外,几乎所有使用注册的应用程序都需要这样做,但我找不到任何关于如何在Android中这样做的资源

另外,我想告诉您,我的最低sdk版本是7


请帮忙。

我建议您使用数据库。API级别7支持SQLite数据库(我自己在android 2.1中使用过)。创建一个包含所有必需信息的表:

create table countries (
    _id integer primary key autoincrement,
    country_code    char(2),
    country_name    varchar,
    phone_code      char(4),
    editable        integer
);

然后将您的国家/地区信息存储在此表中。填充国家列表时,请使用此表而不是XML;显示国家/地区名称,并将国家/地区代码与每个相应的列表项相关联。然后在选择时,使用国家代码获取电话代码和“可编辑”标志,并根据此信息进行操作。

我最终能够在不使用数据库的情况下完成此操作。我写下了这些步骤,这样可以帮助其他需要做同样事情的人

首先,我下载了CSV,网址为:

我删除了所有其他字段,除了我需要的字段。它给我留下了3个字段:名称、缩写和调用代码

接下来,我从以下网站下载了CSVReader:

从CSV获取“Kopfgeldjaeger”中提到的项目,如下所示:

stringnext[]={};
列表=新的ArrayList();
试一试{
CSVReader reader=新的CSVReader(新的InputStreamReader(getAssets().open(“countries.csv”));
对于(;;){
next=reader.readNext();
如果(下一步!=null){
列表。添加(下一步);
}否则{
打破
}
}
}捕获(IOE异常){
e、 printStackTrace();
}
接下来,我为每个值添加了一个ArrayList,如下所示:

ArrayList<String> countryNames = new ArrayList<String>();
ArrayList<String> countryAbber = new ArrayList<String>();
ArrayList<String> countryCodes = new ArrayList<String>();

for(int i=0; i < list.size(); i++)
{
    countryNames.add(list.get(i)[0]); // gets name
    countryAbber.add(list.get(i)[1]); // gets abbreviation
    countryCodes.add(list.get(i)[2]); // gets calling code
}
arraylistcountrynames=new ArrayList();
ArrayList countryAbber=新的ArrayList();
ArrayList countryCodes=新的ArrayList();
对于(int i=0;i
然后将其添加到XML布局中的微调器中,如下所示:

ArrayAdapter<String> countryAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, countryNames);
        spinner.setAdapter(countryAdapter);

// adding event to display codes when country is selected


spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int pos, long arg3) {
                // display the corresponding country code
                TextView tvCountryCode = (TextView) findViewById(R.id.country_code);
                tvCountryCode.setText("+"+list.get(pos)[2]);
                countryPosition = pos;
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });
ArrayAdapter countryAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器\u下拉菜单\u项,countryNames);
spinner.setAdapter(countryAdapter);
//选择国家/地区时向显示代码添加事件
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView arg0、视图arg1、,
内部位置,长arg3){
//显示相应的国家/地区代码
TextView tvCountryCode=(TextView)findViewById(R.id.country\u代码);
tvCountryCode.setText(“+”+list.get(pos)[2]);
countryPosition=pos;
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
});
这样,当从下拉列表中选择一个国家时,我就能够在xml文件中显示国家代码

请记住添加setOnItemSelectedListener()以实现此目的


我希望这对将来有帮助。

检查this@aamirkhan:不包含国家/地区呼叫代码的。无论如何,谢谢你。你为什么不想使用数据库呢?在我看来,您使用的数据类型非常适合数据库,而且数据库比一组数组更容易查询。因为如果我使用数据库,这将是我存储在那里的唯一数据,我的应用程序当前不使用数据库。它可能是一个额外的开销。“它可能是一个额外的开销”-或者它可能是一个更有效的应用程序。如果原因是您不喜欢使用sqlite,这是一个合理的原因,但不要害怕向自己承认。您没有理解我的观点。我对sqlite更为熟悉,因为它解析CSV,但将数据库用于这个仅用于注册的小事情,确实是一种开销。也许你现在应该承认你对sqlite的额外爱。我不会承认,因为我对它没有任何爱:)事实上,如果我真的不需要它,我宁愿避免它。然而,在性能方面,它确实比解析CSV或XML提供了更好的结果。
ArrayAdapter<String> countryAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, countryNames);
        spinner.setAdapter(countryAdapter);

// adding event to display codes when country is selected


spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int pos, long arg3) {
                // display the corresponding country code
                TextView tvCountryCode = (TextView) findViewById(R.id.country_code);
                tvCountryCode.setText("+"+list.get(pos)[2]);
                countryPosition = pos;
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });