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+网络请求数据解析,大致就这些信息,谢谢!

猜你喜欢

转载自blog.csdn.net/qq_37523448/article/details/80096825
今日推荐