本例子中使用的是:HttpURLConnection+Thread+Handler的组合,在 new Thread中通过HttpURLConnection获取JSON数据后并在Handler里对UI界面进行更新。






也可以用过HttpClient ,AsyncTask实现此功能,此处就不说啦。


废话不多少直接上代码了






-------------------------------分割线----------------------------------------


activity_main.xml(只有一个简单TextView,用于展示获取JSON后更新其Text)




                    

 


MainActivity.java




package com.zb.json_text;    import java.io.ByteArrayOutputStream;  import java.io.InputStream;  import java.net.HttpURLConnection;  import java.net.URL;  import java.util.ArrayList;  import java.util.HashMap;  import java.util.List;  import java.util.Map;      import org.json.JSONArray;  import org.json.JSONObject;    import android.app.Activity;  import android.os.Bundle;  import android.os.Handler;  import android.widget.TextView;    public class MainActivity extends Activity {        private TextView textview_01;      private List> slist;        private Handler handler = new Handler() {          public void handleMessage(android.os.Message msg) {              switch (msg.what) {              case 0:                  Map map = slist.get(2); // 例子而已,直接获取下标为2的值了,可以通过循环将list的值取出                  textview_01.setText(map.get("title"));//在handler中更新UI                  break;                default:                  break;              }          }      };        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);            final String path = "http://xxxxxxxxxxxxxxxxxxx.html?format=json&size=5";          textview_01 = (TextView) findViewById(R.id.textview_01);            new Thread() {//创建子线程进行网络访问的操作              public void run() {                  try {                      slist = getJSONObject(path);                      handler.sendEmptyMessage(0);                  } catch (Exception e) {                      e.printStackTrace();                  }              }          }.start();      }        /**       * 获取网络中的JSON数据       * @param path       * @return       * @throws Exception       */      public static List> getJSONObject(String path)              throws Exception {            List> list = new ArrayList>();          Map map = null;          URL url = new URL(path);          // 利用HttpURLConnection对象,我们可以从网页中获取网页数据          HttpURLConnection conn = (HttpURLConnection) url.openConnection();          // 单位为毫秒,设置超时时间为5秒          conn.setConnectTimeout(15 * 1000);          // HttpURLConnection对象是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为get          conn.setRequestMethod("GET");          if (conn.getResponseCode() == 200) {// 判断请求码是否200,否则为失败              InputStream is = conn.getInputStream(); // 获取输入流              byte[] data = readStream(is); // 把输入流转换成字符串组              String json = new String(data); // 把字符串组转换成字符串                // 数据形式:{"total":2,"success":true,"arrayData":[{"id":1,"name":"张三"},{"id":2,"name":"李斯"}]}              JSONObject jsonObject = new JSONObject(json); // 返回的数据形式是一个Object类型,所以可以直接转换成一个Object              int total = jsonObject.getInt("count");              String keywords = jsonObject.getString("keywords");                // 里面有一个数组数据,可以用getJSONArray获取数组              JSONArray jsonArray = jsonObject.getJSONArray("data");              for (int i = 1; i < jsonArray.length(); i++) {                  JSONObject item = jsonArray.getJSONObject(i); // 得到每个对象                  int id = item.getInt("id");                  String title = item.getString("title");                  String description = item.getString("description");                  int time = item.getInt("time");                  map = new HashMap();                  map.put("id", id + "");                  map.put("title", title);                  map.put("description", description);                  map.put("time", time + "");                  list.add(map);              }          }            return list;      }        private static byte[] readStream(InputStream inputStream) throws Exception {          ByteArrayOutputStream bout = new ByteArrayOutputStream();          byte[] buffer = new byte[1024];          int len = 0;          while ((len = inputStream.read(buffer)) != -1) {              bout.write(buffer, 0, len);          }          bout.close();          inputStream.close();          return bout.toByteArray();      }    }  





源码地址:http://download.csdn.net/detail/u011732740/8854953

更多相关文章

  1. android——Seneor(获得数据值流程以及同时监听多个sensor)
  2. Android设置launchMode为singleTask的Activity怎么刷新页面内容
  3. Android(安卓)studio 无线调试
  4. TrafficStats ------- Android流量统计类的使用
  5. Android.text.TextUtils类
  6. android:allowBackup = false后编译报错
  7. Android(安卓)GreenDao数据库—基础详解
  8. Android面试系列文章2018之ListView篇
  9. Android(安卓)ListView分页加载数据Demo

随机推荐

  1. Android开发之ExpandableListView: 可展
  2. arcgis for android 100.2加载离线地图随
  3. 阅读《Android(安卓)从入门到精通》(22)—
  4. Android的NestedScroll机制
  5. 【转】使用Intent将图片或文字分享到新浪
  6. 使用apktool工具遇到could not decode ar
  7. 【Android(安卓)Studio】AS 使用记录06「
  8. Android(安卓)字体大小怎么自适应不同分
  9. Android(安卓)ListView下拉刷新上拉自动
  10. android RefBase