您的位置:首页 > Web前端 > JavaScript

读取本地JSON文件并显示

2016-07-14 10:50 555 查看

程序功能:读取本地JSON文件,并显示到LsitView上,下面详细介绍:

[
2     {
3       "operator":"admin1",
4       "loginDate":"2012-10-20 10:28:10",
5       "logoutDate":"2012-10-20 10:32:10"
6     },
7     {
8       "operator":"admin2",
9       "loginDate":"2012-10-22 10:20:10",
10       "logoutDate":"2012-10-22 10:32:10"
11     },
12     {
13       "operator":"admin3",
14      "loginDate":"2012-10-23 10:28:10",
15       "logoutDate":"2012-10-23 10:32:10"
16     },
17     {
18       "operator":"admin4",
19       "loginDate":"2012-10-20 10:28:10",
20       "logoutDate":"2012-10-20 10:32:10"
21     }
22 ]

先准备内容如上的"json.txt"文件,放到项目的assets目录下(此处可以是本地SD卡只是读取的方式有些异同)。首先要读出json.txt的内容,要访问assets下的资源,需要使用AssetManager类的open(filename)方法,文中省去(AssetManager assetManager = getAssets();)步骤,简写为Context.getAssets().open(filename)。open方法返回一个输入流,我们便可以通过这个流来得到json字符串。

/**
2      * 读取本地文件中JSON字符串
3      *
4      * @param fileName
5      * @return
6      */
7     private String getJson(String fileName) {
8
9         StringBuilder stringBuilder = new StringBuilder();
10         try {
11             BufferedReader bf = new BufferedReader(new InputStreamReader(
12                     getAssets().open(fileName)));
13             String line;
14             while ((line = bf.readLine()) != null) {
15                 stringBuilder.append(line);
16             }
17         } catch (IOException e) {
18             e.printStackTrace();
19         }
20         return stringBuilder.toString();
21     }


获得JSON字符串,我们便可以解析,进而得到对我们有用的数据,Adnroid已经加入了org.json.*,所以我对json的操作也变得简单起来,使用JSONArray array = new JSONArray(str) 就能把我们刚刚得到的JSON串传化为JSONArray,请注意观察我们的josn.txt的内容,其中包括了四组数据结构相同的数据,每一组数据看成一个JSONObject(包含了若干键值对,很像Map),而这些JSONObject便组成了一组JSONArray数组,所以我们只要遍历这个array就可以得到其中的所有JSONObject了,有了JSONObject就可以通过Key获得对应的Value值了。

1 /**
2 * 将JSON字符串转化为Adapter数据
3 *
4 * @param str
5 */
6 private void setData(String str) {
7 try {
8 JSONArray array = new JSONArray(str);
9 int len = array.length();
10 Map<String, String> map;
11 for (int i = 0; i < len; i++) {
12 JSONObject object = array.getJSONObject(i);
13 map = new HashMap<String, String>();
14 map.put("operator", object.getString("operator"));
15 map.put("loginDate", object.getString("loginDate"));
16 map.put("logoutDate", object.getString("logoutDate"));
17 data.add(map);
18 }
19 } catch (JSONException e) {
20 e.printStackTrace();
21 }
22 }

 填充完我们的数据集合,就可以放置到Adapter中,并显示到LsitView中,下面给出完整代码,

json.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3     android:layout_width="fill_parent"
4     android:layout_height="fill_parent"
5     android:orientation="vertical" >
6
7     <ListView
8         android:id="@+id/listView"
9         android:layout_width="fill_parent"
10         android:layout_height="wrap_content" >
11     </ListView>
12
13 </LinearLayout>

json_item.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3     android:layout_width="fill_parent"
4     android:layout_height="fill_parent" >
5
6     <TextView
7         android:id="@+id/operator_tv"
8         android:layout_width="fill_parent"
9         android:layout_height="wrap_content"
10         android:layout_marginLeft="15dp" />
11
12     <TextView
13         android:id="@+id/loginDate_tv"
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"
16         android:layout_alignLeft="@id/operator_tv"
17         android:layout_below="@id/operator_tv" />
18
19     <TextView
20         android:id="@+id/logoutDate_tv"
21         android:layout_width="wrap_content"
22         android:layout_height="wrap_content"
23         android:layout_alignTop="@+id/loginDate_tv"
24         android:layout_marginLeft="15dp"
25         android:layout_toRightOf="@+id/loginDate_tv" />
26
27 </RelativeLayout>
1 public class JSONTextActivity extends Activity {
2
3     private ListView listView;
4     private List<Map<String, String>> data;
5     private final static String fileName = "json.txt";
6     private ProgressDialog pd;
7
8     @Override
9     protected void onCreate(Bundle savedInstanceState) {
10         super.onCreate(savedInstanceState);
11         setContentView(R.layout.json);
12         init();
13         pd.show();
14         new DataThread().start();
15
16     }
17
18     /**
19      * 初始化
20      */
21     private void init() {
22         listView = (ListView) findViewById(R.id.listView);
23         data = new ArrayList<Map<String, String>>();
24         pd = new ProgressDialog(this);
25         pd.setMessage("数据加载中……");
26
27     }
28
29     /**
30      * 加载数据线程
31      */
32     class DataThread extends Thread {
33
34         @Override
35         public void run() {
36             String jsonStr = getJson(fileName);
37             setData(jsonStr);
38             dataHandler.sendMessage(dataHandler.obtainMessage());
39         }
40
41     }
42
43     /**
44      * 加载数据线程完成处理Handler
45      */
46     Handler dataHandler = new Handler() {
47
48         public void handleMessage(android.os.Message msg) {
49             if (pd != null) {
50                 pd.dismiss();
51             }
52             SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(),
53                     data, R.layout.json_item, new String[] { "operator",
54                             "loginDate", "logoutDate" }, new int[] {
55                             R.id.operator_tv, R.id.loginDate_tv,
56                             R.id.logoutDate_tv });
57             listView.setAdapter(adapter);
58         }
59     };
60
61     /**
62      * 读取本地文件中JSON字符串
63      *
64      * @param fileName
65      * @return
66      */
67     private String getJson(String fileName) {
68
69         StringBuilder stringBuilder = new StringBuilder();
70         try {
71             BufferedReader bf = new BufferedReader(new InputStreamReader(
72                     getAssets().open(fileName)));
73             String line;
74             while ((line = bf.readLine()) != null) {
75                 stringBuilder.append(line);
76             }
77         } catch (IOException e) {
78             e.printStackTrace();
79         }
80         return stringBuilder.toString();
81     }
82
83     /**
84      * 将JSON字符串转化为Adapter数据
85      *
86      * @param str
87      */
88     private void setData(String str) {
89         try {
90             JSONArray array = new JSONArray(str);
91             int len = array.length();
92             Map<String, String> map;
93             for (int i = 0; i < len; i++) {
94                 JSONObject object = array.getJSONObject(i);
95                 map = new HashMap<String, String>();
96                 map.put("operator", object.getString("operator"));
97                 map.put("loginDate", object.getString("loginDate"));
98                 map.put("logoutDate", object.getString("logoutDate"));
99                 data.add(map);
100             }
101         } catch (JSONException e) {
102             e.printStackTrace();
103         }
104     }
105 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: