Android - 从JSON中提取所需数据时遇到麻烦

时间:2015-03-10 06:37:41

标签: android json

在我的应用程序中,我有一个以下格式的本地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。

3 个答案:

答案 0 :(得分:1)

您从加载json方法返回的字符串是JsonArray而不是JsonObject

改变
JSONArray arr;
        JSONObject jsonObj = new JSONObject(loadJson());

        arr = new JSONArray(jsonObj);

到此

JSONArray arr;
            arr = new JSONArray(loadJson());
  

警告

更改清单文件中的min sdk版本,如下所示

android:minSdkVersion="19"

或在方法loadJson

中应用抑制警告

阅读here

答案 1 :(得分:0)

在您的清单文件中替换

android:minSdkVersion="16"

android:minSdkVersion="19"

答案 2 :(得分:0)

您的结果来自jsonArray形式的服务器,但您尝试转换为jsonObject。以下是您要做的事情: -

mJSONObject = new JSONObject(loadJson());

但你应该这样做: -

mJSONArray = new JSONArray(loadJson());

最重要的是JSONArray(Object array)直到 API级别19 才会被引入。

Read here

您可以将manifest中的min API 版本更改为19或

您可以将Object array转换为Collection array ArrayList,并使用{strong> API 1 中提供的JSONArray的Collection数组构造函数。