Когда мне нужны пользовательские объекты, которые можно редактировать вне кода, я обычно использую json, который легче читать как людям, так и (возможно) машинам;)
Вы также можете иметь более сложные объекты, чем с простыми массивами.
Как только вы создадите файл json (например, country.json) в папке /res/raw
, например:
{ "countries" : [
{"country" : "Albania", "countryCode" : "al" },
{"country" : "Algeria", "countryCode" : "dz"},
{"country" : "American Samoa", "countryCode" : "as"},
{"country" : "India", "countryCode" : "in"},
{"country" : "South Africa", "countryCode" : "sa"}
]}
, вы можете загрузить данные следующим образом:
InputStream jsonStream = context.getResources().openRawResource(R.raw.countries);
JSONObject jsonObject = new JSONObject(Strings.convertStreamToString(jsonStream));
JSONArray jsonContries = jsonObject.getJSONArray("countries");
List<CountryVO> countries = new ArrayList<CountryVO>();
for (int i = 0, m = countries.length(); i < m; i++) {
JSONObject jsonCountry = countries.getJSONObject(i);
CountryVO country = new CountryVO();
country.setCountryName(jsonCountry.getString("country"));
String co = jsonCountry.getString("countryCode");
country.setCountryCode(co);
try {
Class<?> drawableClass = com.example.R.drawable.class; // replace package
Field drawableField = drawableClass.getField(co);
int drawableId = (Integer)drawableField.get(null);
Drawable drawable = getResources().getDrawable(drawableId);
country.setCountryFlag(drawable);
} catch (Exception e) {
// report exception
}
countries.add(country);
}
Если вы не хотите выполнять синтаксический анализ вручную, вы также можете использовать gson , который поможет вам передать объекты, а затем загрузить ленивые объекты ленивым образом ...;)
Редактировать: Добавлен служебный класс
public String convertStreamToString(InputStream is) {
Scanner s = new Scanner(is).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
Надеюсь, это поможет