В моем приложении у меня есть локальный файл JSON в следующем формате:Android - возникли проблемы с извлечением необходимых данных из JSON
[
{
"iso": "AF",
"tel": "93"
},
{
"iso": "AL",
"tel": "355"
},
{
"iso": "DZ",
"tel": "213"
}
]
Я получаю пользователя iso
и в соответствии с данными в файле формата JSON необходимо извлечь код страны (очевидно, tel
).
Метод, который возвращает строку из файла JSON:
private String loadJson(){
String json;
try{
InputStream inputStream = getAssets().open("countries.json");
int size = inputStream.available();
byte[] buffer = new byte[size];
inputStream.read(buffer);
inputStream.close();
json = new String(buffer,"UTF-8");
}catch (IOException e){
e.printStackTrace();
return null;
}
return json;
}
Это получает пользователя код ISO:
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String countryCode = tm.getSimCountryIso();
Log.i("Country Code: ", countryCode); //"AF" for example
И это то, что я сделал до сих пор, что, очевидно, не работает, как я нужно:
try{ // doesnt work
JSONArray arr;
JSONObject jsonObj = new JSONObject(loadJson());
arr = new JSONArray(jsonObj);
for(int i=0; i < arr.length() ; i++){
JSONObject test = arr.getJSONObject(i);
if(test.getString("iso")==countryCode)
Log.d("TEL: ", test.getString("tel"));
}
}catch (JSONException e){
e.printStackTrace();
}
}
в довершение всего, я получаю предупреждение о Call requires API level 19 (current min is 16): org.json.JSONArray
, поэтому я думаю, мне нужно обходное решение для извлечения необходимых мне данных (мое решение не работает) и по-прежнему поддерживает более низкие версии Android.
причина для предупреждения, похоже, что-то другое, чем то, о чем вы упоминали. AS org.json.JSONArray был добавлен в API уровня 1. Вот ссылка на документацию. developer.android.com/reference/org/json/JSONArray.html – cafebabe1991
Мой плохой ... Да, предупреждение связано с тем, что конструктор JSONArray (Object) принадлежит к уровню API 19. – cafebabe1991