-1

我正在搜索项目数据库。当我在我的 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 = "";}
4

1 回答 1

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 之外(但在同一个类中)创建返回方法。

 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;
}

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

于 2013-06-13T22:12:25.797 回答