我已经实现了Volley and Recycler视图来解析和显示来自简单JSON文件的一些项目的列表。 有时,某个键不存在于某个对象中,但可能会出现在其他对象中。该键已使用object.getInt(“ someKey”)定义。
当Volley开始使用缺少的键解析对象时,它就会脱离for循环(对象存储在数组中)并捕获JSONException e,这正是应用程序在出现a情况下应该执行的操作缺少密钥。
但是,我想防止这种情况,并为该特定对象的缺失键使用占位符值,以便成功建立数组列表并填充recyclerview,从而使应用程序开始正常工作。
我可以使用什么逻辑来实现此行为?
谢谢!
<body>
<form id="form1" runat="server">
<div>
<a href="#" class="skip" onmousedown="FocusContent(event);" onclick="FocusContent(event);" title ="Skip to Main content">Skip To main content</a>
<a href="http://www.google.com" title ="Google">Google</a><a href="http://www.microsoft.com" title ="Microsoft">Microsoft</a><a href="http://www.Deloitte.com" title ="Deloitte">Deloitte</a>
<br />
<a href="http://www.wikipedia.org">
<input type="text" value =" Some text " />
</a>
<table id ="table1" border="1">
<tr>
<td>
<a href="http://www.wikipedia.org" class=""> One</a>
</td>
</tr>
<tr id="Two">
<td>
<a href="http://www.wikipedia.org">Two</a>
</td>
</tr>
<tr>
<td>
<a href="http://www.wikipedia.org" class="cSSFirst">Three</a>
</td>
</tr>
<tr>
<td>
<a href="http://www.wikipedia.org">Four</a>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
<script>
function FocusContent(event) {
event.preventDefault();
console.log('Fire here');
if (event.which == 1) {
$('.cSSFirst').focus();
}
}
</script>
在上面的代码中,threadId是键,它可能会或可能不会出现在JSON的许多对象中。
答案 0 :(得分:1)
您可以首先检查您的密钥是否存在于对象上
try {
for (int i = 0; i < response.length(); i++) {
JSONObject object = response.getJSONObject(i);
String title = object.getString("subject");
String description = object.getString("message");
String imageUrl = object.getString("thumb");
Integer threadId;
if(object.toString().contain("threadId"){
threadId = object.getInt("threadId");
}else{
threadId = 0;
}
mList.add(new Item( title, description, threadId));
}
mItemAdapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
答案 1 :(得分:0)
object.getInt("someKey")
是要从“ somekey”获取值。如果未出现somekey,则显示JSONException。代替此object.optInt("someKey")
。如果出现,它将从“ somekey”获取值,否则将被跳过。这是简单的解决方案。谢谢
答案 2 :(得分:0)
如果我很好地理解了您的问题,请执行以下操作,如果不确定此键是否存在,请使用以下
jsonObject.optBoolean("yourKey");
jsonObject.optInt("yourKey");
jsonObject.optString("yourKey");
jsonObject.optLong("yourKey");
jsonObject.optDouble("yourKey");
jsonObject.optJSONArray("yourKey");
这将确保jsonObject如果该键不存在,将忽略该键。