我正在搜索项目数据库。当我在我的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 = "";}
答案 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;
}
有一种更有效的方法来编写此代码。在我的视频中,我将解释更多。但这暂时可行。