json对象数据发生变化,有时没有任何价值

时间:2013-06-13 16:29:37

标签: java android json api

我正在搜索项目数据库。当我在我的Android应用程序中搜索并获取json时,如果某个项目没有其中一个对象的值,则会中断。

例如,如果我为项目返回了此数据:

名 ID IBU ABV

并非每个项目都有每个数据点的值,所以如果一个项目缺少IBU,它只是在json中没有该数据点,而我的代码就停止了。当我搜索并且项目没有ibu时,我的一个查询中断。所以我试着在它旁边试一试,如果它没有得到任何东西就让它忽略它。它仍然停止了。

String beerId = "";
                    String beerName = "";
                    String beerDescription = "";;
                    String beerAbv = "";
                    String beerIbu = "";

                    //json.getJSONArray("data").length()

                    //get json items
                    for(int i = 0; i < 1; i++) {

                        try{
                            beerId = json.getJSONArray("data").getJSONObject(i).getString("id");
                        }
                        finally{}

                        beerName = json.getJSONArray("data").getJSONObject(i).getString("name");
                        beerDescription = json.getJSONArray("data").getJSONObject(i).getString("description");
                        beerAbv = json.getJSONArray("data").getJSONObject(i).getString("abv");
                        try{
                            beerIbu = json.getJSONArray("data").getJSONObject(i).getString("ibu");
                        }
                        finally{beerIbu = "";}

1 个答案:

答案 0 :(得分:1)

解决此问题的一个好方法是创建一个方法(void),然后完成所有工作,然后返回您正在寻找的答案。我正在制作YouTube视频以帮助更好地解释,但这里是代码:

 String beerId = GetBeerDataFromJSON(0,"id");
 String beerName = GetBeerDataFromJSON(0,"name");
 String beerDescription = GetBeerDataFromJSON(0,"description");
 String beerAbv = GetBeerDataFromJSON(0,"abv");
 String beerIbu = GetBeerDataFromJSON(0,"ibu");

然后在该void之外(但在同一个类中)创建return方法。

 private String GetBeerDataFromJSON(int position, String whatToGet) {
    String whatIsTheKeyYouAreLookFor = whatToGet;
    int whereInTheJSONArrayForLoopIsTheData = position;

    String holder = "";


    try{
        holder = json.getJSONArray("data").getJSONObject(whereInTheJSONArrayForLoopIsTheData).getString(whatIsTheKeyYouAreLookFor);

    } catch (JSONException e) {
        holder = "";
    }



    return holder;
}

有一种更有效的方法来编写此代码。在我的视频中,我将解释更多。但这暂时可行。