Android - 读取网站json并显示到Activity

1.首先写一段json , 上传到www.myjson.com

[
  {
    "CarId": 1,
    "UserName": "Z0001"
  },
  {
    "CarId": 2,
    "UserName": "Z0002"
  },
  {
    "CarId": 3,
    "UserName": "Z0003"
  }
]

 

得到一个有我们已经写好的json网站

2.完成了先前准备工作,现在打开Android studio

准备xml页面

 

2.在manifest中需要加入允许网络权限

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

3.编写获取JSON类,注意需要写在另一个线程中,如果在主线程中修改UI会导致程序崩溃
这里我们需要使用到的是异步进程 AsyncTask,参数都是无,就填Void就行了
AsyncTask 异步线程中有4个重要的方法需要被重写
onPreExecute()
onProgressUpdate()
onPostExecute()
*doInBackground() //在后台执行
   整体思路:
      1.保存url值
      2.连接url
      3.缓存读取到的内容
      4.用数组分别取出缓存的内容
 1 public class fetchdata extends AsyncTask<Void,Void,Void> {
 2     String data = "";
 3     int Carid;
 4     String Carnumber=null;
 5     List<Integer> CarId_list = new ArrayList<>();
 6     List<String> CarNumber_list = new ArrayList<>();
 7 
 8     @Override
 9     protected Void doInBackground(Void... voids) {
10         try {
11 
12             URL url = new URL("https://api.myjson.com/bins/8beww");
13 
14             HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
15 
16             InputStream inputStream = urlConnection.getInputStream();
17             BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
18 
19             String temp = "";
20             while (temp != null){
21                 temp = bufferedReader.readLine();
22                 data = data + temp;
23             }
24 
25             JSONArray jsonArray = new JSONArray(data);
26             for(int i=0;i<jsonArray.length();i++){
27                 JSONObject object  = jsonArray.getJSONObject(i);
28 
29                 Carid = object.getInt("CarId");
30                 Carnumber = object.getString("UserName");
31 
32                 CarId_list.add(Carid);
33                 CarNumber_list.add(Carnumber);
34             }
35 
36         } catch (MalformedURLException e) {
37             e.printStackTrace();
38         } catch (IOException e) {
39             e.printStackTrace();
40         } catch (JSONException e) {
41             e.printStackTrace();
42         }
43 
44         return null;
45     }
46 
47     @Override
48     protected void onPostExecute(Void aVoid) {
49         super.onPostExecute(aVoid);
50 
51         for(int i=0;i<CarNumber_list.size();i++){
52             MainActivity.textView.append(CarId_list.get(i).toString()+" "+CarNumber_list.get(i)+"\n");
53 
54         }
55     }

 



 

posted @ 2019-04-19 22:01  kevin162726  阅读(793)  评论(0编辑  收藏  举报