1. 程式人生 > >Android客戶端之Post獲取伺服器json資料以及解析

Android客戶端之Post獲取伺服器json資料以及解析

1,主要內容為Android客戶端請求伺服器post提交引數;
2,請求到完整的json資料之後,進行解析取值(看json資料是物件型別還是陣列結構);

    private void okhttpDate() {
        Log.i("TAG","--ok-");
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection conn=null;
                String urlStr="伺服器的url路徑"
; InputStream is = null; String resultData = ""; try { URL url = new URL(urlStr); //URL物件 conn = (HttpURLConnection)url.openConnection(); //使用URL開啟一個連結,下面設定這個連線 conn.setRequestMethod("POST"); //使用POST請求
if(conn.getResponseCode()==200) {//返回200表示相應成功 is = conn.getInputStream(); //獲取輸入流 InputStreamReader isr = new InputStreamReader(is); BufferedReader bufferReader = new BufferedReader(isr); String inputLine = ""
; while ((inputLine = bufferReader.readLine()) != null) { resultData += inputLine + "\n"; } System.out.println("post方法取回內容:" + resultData); jsonJXDate(resultData); } } catch (IOException e) { e.printStackTrace(); } } }).start(); }

請求資料已經完成,可以除錯看看是否有資料,再就是解析了;

    private void jsonJXDate(String date) {
        if(date!=null) {
            try {
                JSONObject jsonObject = new JSONObject(date);
                String resultCode = jsonObject.getString("message");
                if (resultCode.equals("success")) {
                    JSONArray resultJsonArray = jsonObject.getJSONArray("devices");
                    for(int i=0;i<resultJsonArray.length();i++){
                        jsonObject = resultJsonArray.getJSONObject( i );
                        Map<String, Object> map = new HashMap<>();
                        //獲取到json資料中的activity數組裡的內容name
                        String name = jsonObject.getString("devicename");
                        //獲取到json資料中的activity數組裡的內容startTime
                        String shijian=jsonObject.getString("deviceaddre");
                        //存入map
                        map.put("name", name);
                        map.put("shijian", shijian);
                        //ArrayList集合
                        list.add(map);
                    }
                }
                Message msg=new Message();
                msg.what=1;
                handler.sendMessage(msg);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }

請求解析資料ok了,我們請求網路資料需要開啟執行緒的,所以別忘記了;

    public Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                case 1:
                    //新增分割線
                    mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL));
                    recy_item_Adapter recy=new recy_item_Adapter(list,getActivity());
                    //設定佈局顯示格式
                    mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
                    mRecyclerView.setAdapter(recy);
                    recy.setOnItemClickListener(this);
                    break;

            }
        }
    };
    public void onRefresh() {
        //檢查是否處於重新整理狀態
        if (!isRefresh) {
            isRefresh = true;
            //模擬載入網路資料,這裡設定2秒,正好能看到2色進度條
            new Handler().postDelayed(new Runnable() {
                public void run() {
                    //顯示或隱藏重新整理進度條
                    swipeRefreshLayout.setRefreshing(false);
                    //修改adapter的資料
                    //data.add("這是新新增的資料");
//                    mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL));
//                    recy_item_Adapter recy=new recy_item_Adapter(list,getActivity());
//                    //設定佈局顯示格式
//                    mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
//                    mRecyclerView.setAdapter(recy);
//                    recy.notifyDataSetChanged();
                    isRefresh = false;
                }
            }, 2000);
        }
    }

我這裡是動態顯示佈局檔案資訊,寫了RecyclerView的類檔案裡面,不懂的初學者可以網上看看RecyclerView+網路請求資料解析,大致就這些資訊,謝謝!