3

我正在尝试从 Android XML 开发一个注册屏幕。与每个注册表单一样,我需要显示国家/地区列表。我可以在 strings.xml 文件中使用字符串数组来做到这一点。

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

除此之外,当用户提交注册表单时,我必须发送国家的缩写代码,而不是完整的国家名称。现在,这又需要数据库还是 xml?

我的应用程序直到现在才使用数据库,为此目的使用数据库并不是那么好。此外,几乎所有使用注册的应用程序都需要完成此操作,但我找不到任何有关如何在 Android 中执行此操作的资源。

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

请帮忙。

4

2 回答 2

3

我终于能够在不使用数据库的情况下做到这一点。我正在写下这些步骤,以便它可以帮助其他需要做同样事情的人。

首先我下载了​​ CSV:https ://github.com/mledoze/countries/blob/master/countries.csv

我删除了所有其他字段,除了我需要的那些。它给我留下了 3 个字段:姓名、缩写和呼叫代码。

接下来,我从以下网址下载了 CSVReader:http ://code.google.com/p/secrets-for-android/source/browse/trunk/src/au/com/bytecode/opencsv/CSVReader.java

如如何在 Android 应用程序中解析 CSV 文件中所述,从 CSV 中获取项目?由“Kopfgeldjaeger”作为:

String next[] = {};
List<String[]> list = new ArrayList<String[]>();

 try {
      CSVReader reader = new CSVReader(new InputStreamReader(getAssets().open("countries.csv")));
            for(;;) {
                next = reader.readNext();
                if(next != null) {
                    list.add(next);
                } else {
                    break;
                }
            }
        } catch (IOException e) {
            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
}

然后将其添加到 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

            }
        });

这样,当从下拉列表中选择一个国家/地区时,我能够在 xml 文件中显示国家/地区代码。

请记住添加 setOnItemSelectedListener() 来实现这一点。

我希望这对将来的人有所帮助。

于 2013-04-23T10:09:26.893 回答
0

我建议你使用数据库。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;显示国家名称并将国家代码与每个相应的列表项相关联。然后在选择时,使用国家代码获取电话代码和“可编辑”标志 - 并根据此信息采取行动。

于 2013-04-23T08:45:30.937 回答