zoukankan      html  css  js  c++  java
  • Android Volley获取json格式的数据

      为了让Android能够快速地访问网络和解析通用的数据格式Google专门推出了Volley库,用于Android系统的网络传输。volley库可以方便地获取远程服务器的图片、字符串、json对象和json对象数组等。当然,java本身也有获取json对象的方法,然而为了更好地适应移动互联网,google专门为其做了特殊的优化,因而应该尽可能地使用Volley库。

      Volley官方文档:https://developer.android.com/training/volley/index.html

      Volley库下载:git clone https://android.googlesource.com/platform/frameworks/volley/(由于用到google,因而需要做一些特殊的处理;您可参考前面的文章“git无法clone远程代码库及git代理设置”)

      环境:Android Studio

      一、将Volley库导入到Android工程中(此处采用的是源码导入的方式,更多方式导入方式可参考“Android Studio 简介及导入 jar 包和第三方开源库方法”):

      1、将下载好的源码拷贝到app同级目录下,在setting.gradle下添加volley库支持

    include ':app', ':volley'

      2、在app/build.gradle中的dependencies下添加

    compile project(':volley')

      最后结果如下:

    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        compile 'com.android.support:appcompat-v7:23.0.1'
        compile project(':volley')
    }

      至此,volley裤已经添加到了工程中。下面看看如何通过volley库正确地读取远程服务器上的json对象和json数组。

      由于要访问网络,因此需要对网络权限进行设置。在AndroidManifest.xml中添加如下权限设置。

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

      二、获取服务器json对象

      1、服务器中json对象数据格式

    {"linkmd5id":"c07e1ddae86029dbd1f4fb79a6f532fc","view":"149","comment":"1","diggnum":"0","postdate":"2015-10-15 12:59","updated":"2015-10-15 07:25:58"}

      2、获取json对象

            RequestQueue requestQueue = Volley.newRequestQueue(this);
            String jsonUrl = "http://152.123.55.102:8080/json.html";
    
            JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,
                    jsonUrl, null, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    System.out.println("json data===" + response);
                }
            }, new Response.ErrorListener(){
    
                @Override
                public void onErrorResponse(VolleyError error) {
                    System.out.println("发生了一个错误!");
                    error.printStackTrace();
                }
            });
            requestQueue.add(jsonObjectRequest);

      3、运行结果:

    10-19 16:34:26.376  24583-24583/com.example.news.andoridnewsapp I/System.out﹕ json data==={"diggnum":"0","postdate":"2015-10-15 12:59","view":"149","comment":"1","updated":"2015-10-15 07:25:58","linkmd5id":"c07e1ddae86029dbd1f4fb79a6f532fc"}

      三、获取json对象数组

      1、原数组

    [{"linkmd5id":"c07e1ddae86029dbd1f4fb79a6f532fc","title":"u3010u539fu521bu3011ZeroClipboardu7684u65f6u4ee3u6216u8bb8u5df2u7ecfu8fc7u53bbu4e86","desc":"
    ","link":"http://www.cnblogs.com/mawuhen/p/4882104.html","listurl":null,"view":"149","comment":"1","diggnum":"0","postdate":"2015-10-15 12:59","updated":"2015-10-15 07:25:58"},{"linkmd5id":"3bf8dd1f81a47a83895e8c55669c6631","title":"Web APiu4e4bu6355u83b7u8bf7u6c42u539fu59cbu5185u5bb9u7684u5b9eu73b0u65b9u6cd5u4ee5u53cau63a5u53d7POSTu8bf7u6c42u591au4e2au53c2u6570u591au79cdu89e3u51b3u65b9u6848uff08u5341u56dbuff09","desc":"
    ","link":"http://www.cnblogs.com/CreateMyself/p/4874273.html","listurl":null,"view":"165","comment":"5","diggnum":"6","postdate":"2015-10-15 12:38","updated":"2015-10-15 07:25:58"},{"linkmd5id":"39375a02b70c6b0a395f42bd97c60cdb","title":"SharePoint APIu6d4bu8bd5u7cfbu5217u2014u2014Records.BypassLocksu6d4bu8bd5","desc":"
    ","link":"http://www.cnblogs.com/LanTianYou/p/4882050.html","listurl":null,"view":"50","comment":"0","diggnum":"0","postdate":"2015-10-15 12:31","updated":"2015-10-15 07:25:58"},{"linkmd5id":"be0e6182fb6fb216e58d21f08e54278e","title":"C#u59d4u6258u4f7fu7528u8be6u89e3uff08Delegatesuff09","desc":"
    ","link":"http://www.cnblogs.com/liuhaorain/p/3911845.html","listurl":null,"view":"226","comment":"1","diggnum":"0","postdate":"2015-10-15 11:47","updated":"2015-10-15 07:25:58"},{"linkmd5id":"d85434e0d6e088a972f53447bf769256","title":"golang reflect","desc":"
    ","link":"http://www.cnblogs.com/coder2012/p/4881854.html","listurl":null,"view":"86","comment":"0","diggnum":"0","postdate":"2015-10-15 11:25","updated":"2015-10-15 07:25:58"},{"linkmd5id":"9e6d443d4c2f489179c22830437e8034","title":"Android Bitmapu5b9eu6218u6280u5de7","desc":"
     u6ce8uff1au672cu6587u5927u91cfu53c2u8003u8c37u6b4cu5b98u65b9u6587u6863u81eahttp://developer.android.com/intl/zh-cn/training/displaying-bitmaps/index.htmlu3002u5982u679cu4f60u81eau5b66u80fdu529bu8fd8u53efu4ee5u6216u8005u82f1u6587u7406u89e3u80fdu529bu4e0du9519u53efu4ee5u76f4u63a5u53bbu770bu539fu7248u7684u3002u5982u679cu4f60u65f6u95f4u5b9du8d35uff0cu60f3u76f4u63a5u770bu7ed3u8bbau548cu6211u4e2au4ebau7406u89e3u7684u5fc3u5f97uff0cu4e5fu53ef... 
     ","link":"http://www.cnblogs.com/punkisnotdead/p/4881771.html","listurl":null,"view":"116","comment":"1","diggnum":"0","postdate":"2015-10-15 11:08","updated":"2015-10-15 07:25:58"},{"linkmd5id":"71bf86ad9eb586aecdca37b9df43acb0","title":"u3010u7ec4u4ef6u5316u5f00u53d1u3011u524du7aefu8fdbu9636u7bc7u4e4bu5982u4f55u7f16u5199u53efu7ef4u62a4u53efu5347u7ea7u7684u4ee3u7801","desc":"
    ","link":"http://www.cnblogs.com/yexiaochai/p/4876099.html","listurl":null,"view":"510","comment":"7","diggnum":"19","postdate":"2015-10-15 11:05","updated":"2015-10-15 07:25:58"},{"linkmd5id":"794568d4689bf1c3fc5b6de7945cd978","title":"WPFu5165u95e8u6559u7a0bu7cfbu5217u4e8cu5341u4e00u2014u2014DataGridu793au4f8b(u4e00)","desc":"
     u524du9762u6211u4eecu5b66u4e60u4e86ListViewu63a7u4ef6u7684u4f7fu7528u793au4f8buff0cu4ecau5929u6211u4eecu6765u5b66u4e60DataGridu7684u6709u5173u77e5u8bc6u3002u63d0u5230DataGrid u4e0du7ba1u662fAsp.Netu4e2du7684u7f51u9875u5f00u53d1u8fd8u662fWinFormu5e94u7528u7a0bu5e8fu5f00u53d1u90fdu4f1au9891u7e41u4f7fu7528u3002u901au8fc7u5b83u6211u4eecu53efu4ee5u7075u6d3bu7684u5728u884cu4e0eu5217u95f4u663eu793au5404u79cdu6570u636eu3002u672cu7bc7u5c06u5b66u4e60WPFu4e2du7684DataGrid u76f8u5173u529fu80fdu3002 
     ","link":"http://www.cnblogs.com/chillsrc/p/4881724.html","listurl":null,"view":"168","comment":"1","diggnum":"2","postdate":"2015-10-15 10:59","updated":"2015-10-15 07:25:58"},{"linkmd5id":"668996b90dc6901e3cd9b8a57c3053ec","title":"Kafkau9879u76eeu5b9eu6218uff0du7528u6237u65e5u5fd7u4e0au62a5u5b9eu65f6u7edfu8ba1u4e4bu7f16u7801u5b9eu8df5","desc":"
    ","link":"http://www.cnblogs.com/smartloli/p/4881690.html","listurl":null,"view":"173","comment":"1","diggnum":"2","postdate":"2015-10-15 10:50","updated":"2015-10-15 07:25:58"},{"linkmd5id":"c02f4087c3de0d74a1c4e63c2922f963","title":"u8be6u7ec6u89e3u8bf4u4effu5236QQu5217u8868 u5c55u5f00u548cu6536u8d77u5217u8868","desc":"
     u8fd1u6765u516cu53f8u7684u9879u76eeu8981u5199u4e2au7c7bu4f3cu4e8eQQu5217u8868u5c55u5f00u548cu6536u8d77u7684u5217u8868uff0cu60f3u5230u4ee5u524du674eu660eu6770u89c6u9891u91ccu8bf4u7684uff0cu5c31u5199u4e2au4e86u5c55u5f00u548cu6536u8d77u7684Demouff0cu5e0cu671bu7ed9u65b0u624bu4e00u70b9u601du8defuff0cu4e0eu5927u5bb6u5171u540cu8fdbu6b65u6211u5199u7684u8fd9u4e2au5c55u5f00u548cu6536u8d77u7684u601du8defu662fuff0cu7528u4e00u4e2au5b57u5178u7684Keyu53bbu8bb0u5f55u70b9u51fbu4e86u7b2cu51e0u7ec4uff0cu7528u72b6u60010-1u53bbu8bb0u5f55u4ed6u4eecu662fu5c55u5f00u7684u8fd8u662fu6536u8d77u7684u5e9fu8bddu4e0du591au8bf4uff0cu4e0au4ee3u7801uff0cu6ce8u91cau5df2u5199uff0cu4e00u5b9au8981u8ba4u771fu770bu54e6uff0cu8ba4u771f... 
     ","link":"http://www.cnblogs.com/bcblogs/p/4881612.html","listurl":null,"view":"449","comment":"2","diggnum":"2","postdate":"2015-10-15 10:27","updated":"2015-10-15 07:25:58"}]

      2、获取json对象数组

            String jsonUrArrUrl = "http://152.123.55.102:8080/index.php";
            JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET,
                    jsonUrArrUrl, null, new Response.Listener<JSONArray>(){
    
                @Override
                public void onResponse(JSONArray response) {
                    System.out.println("json data===" + response);
                }
            }, new Response.ErrorListener(){
    
                @Override
                public void onErrorResponse(VolleyError error) {
                    System.out.println("发生了一个错误!");
                    error.printStackTrace();
                }
            });
            requestQueue.add(jsonArrayRequest);

      3、运行结果

    10-19 16:34:31.046  24583-24583/com.example.news.andoridnewsapp I/System.out﹕ json data===[{"diggnum":"0","postdate":"2015-10-15 12:59","title":"【原创】ZeroClipboard的时代或许已经过去了","desc":"
    ","updated":"2015-10-15 07:25:58","link":"http://www.cnblogs.com/mawuhen/p/4882104.html","view":"149","listurl":null,"comment":"1","linkmd5id":"c07e1ddae86029dbd1f4fb79a6f532fc"},{"diggnum":"6","postdate":"2015-10-15 12:38","title":"Web APi之捕获请求原始内容的实现方法以及接受POST请求多个参数多种解决方案(十四)","desc":"
    ","updated":"2015-10-15 07:25:58","link":"http://www.cnblogs.com/CreateMyself/p/4874273.html","view":"165","listurl":null,"comment":"5","linkmd5id":"3bf8dd1f81a47a83895e8c55669c6631"},{"diggnum":"0","postdate":"2015-10-15 12:31","title":"SharePoint API测试系列——Records.BypassLocks测试","desc":"
    ","updated":"2015-10-15 07:25:58","link":"http://www.cnblogs.com/LanTianYou/p/4882050.html","view":"50","listurl":null,"comment":"0","linkmd5id":"39375a02b70c6b0a395f42bd97c60cdb"},{"diggnum":"0","postdate":"2015-10-15 11:47","title":"C#委托使用详解(Delegates)","desc":"
    ","updated":"2015-10-15 07:25:58","link":"http://www.cnblogs.com/liuhaorain/p/3911845.html","view":"226","listurl":null,"comment":"1","linkmd5id":"be0e6182fb6fb216e58d21f08e54278e"},{"diggnum":"0","postdate":"2015-10-15 11:25","title":"golang reflect","desc":"
    ","updated":"2015-10-15 07:25:58","link":"http://www.cnblogs.com/coder2012/p/4881854.html","view":"86","listurl":null,"comment":"0","linkmd5id":"d85434e0d6e088a972f53447bf769256"},{"diggnum":"0","postdate":"2015-10-15 11:08","title":"Android Bitmap实战技巧","desc":"
        注:本文大量参考谷歌官方文档自http://developer.android.com/intl/zh-cn/training/displaying-bitmaps/index.html。如果你自学能力还可以或者英文理解能力不错可以直接去看原版的。如果你时间宝贵,想直接看结论和我个人理解的心得,也可... 
        ","updated":"2015-10-15 07:25:58","link":"http://www.cnblogs.com/punkisnotdead/p/4881771.html","view":"116","listurl":null,"comment":"1","linkmd5id":"9e6d443d4c2f489179c22830437e8034"},{"diggnum":"19","postdate":"2015-10-15 11:05","title":"【组件化开发】前端进阶篇之如何编写可维护可升级的代码","desc":"
    ","updated":"2015-10-15 07:25:58","link":"http://www.cnblogs.com/yexiaochai/p/4876099.html","view":"510","listurl":null,"comment":"7","linkmd5id":"71bf86ad9eb586aecdca37b9df43acb0"},{"diggnum":"2","postdate":"2015-10-15 10:59","title":"WPF入门教程系列二十一——DataGrid示例(一)","desc":"
        前面我们学习了ListView控件的使用示例,今天我们来学习DataGrid的有关知识。提到DataGrid 不管是Asp.Net中的网页开发还是WinForm应用程序开发都会频繁使用。通过它我们可以灵活的在行与列间显示各种数据。本篇将学习WPF中的DataGrid 相关功能。 
        ","updated":"2015-10-15 07:25:58","link":"http://www.cnblogs.com/chillsrc/p/4881724.html","view":"168","listurl":null,"comment":"1","linkmd5id":"794568d4689bf1c3fc5b6de7945cd978"},{"diggnum":"2","postdate":"2015-10-15 10:50","title":"Kafka项目实战-用户日志上报实时统计之编码实践","desc":"
    ","updated":"2015-10-15 07:25:58","link":"http://www.cnblogs.com/smartloli/p/4881690.html","view":"173","listurl":null,"comment":"1","linkmd5id":"668996b90dc6901e3cd9b8a57c3053ec"},{"diggnum":"2","postdate":"2015-10-15 10:27","title":"详细解说仿制QQ列表 展开和收起列表","desc":"
        近来公司的项目要写个类似于QQ列表展开和收起的列表,想到以前李明杰视频里说的,就写个了展开和收起的Demo,希望给新手一点思路,与大家共同进步我写的这个展开和收起的思路是,用一个字典的Key去记录点击了第几组,用状态0-1去记录他们是展开的还是收起的废话不多说,上代码,注释已写,一定要认真看哦,认真... 
        ","updated":"2015-10-15 07:25:58","link":"http://www.cnblogs.com/bcblogs/p/488

      这样便可方便地获取到json格式的数据。在此畅想一下,如果结合sqllite,是否可以异步获取差异数据进而以最小的流量获取更新的内容呢?

       更多官方例子可在此查看:https://developer.android.com/training/volley/index.html

  • 相关阅读:
    Windows性能计数器应用
    Azure Oracle Linux VNC 配置
    Azure 配置管理系列 Oracle Linux (PART6)
    Azure 配置管理系列 Oracle Linux (PART5)
    Azure 配置管理系列 Oracle Linux (PART4)
    Azure 配置管理系列 Oracle Linux (PART3)
    Azure 配置管理系列 Oracle Linux (PART2)
    vagrant多节点配置
    docker基本操作
    LINUX开启允许对外访问的网络端口命令
  • 原文地址:https://www.cnblogs.com/rwxwsblog/p/4892307.html
Copyright © 2011-2022 走看看