在没有密钥的情况下处理Volley

时间:2018-10-04 13:18:42

标签: android json android-volley

我已经实现了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的许多对象中。

3 个答案:

答案 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如果该键不存在,将忽略该键。