• android发送/接收json数据


    客户端向服务器端发送数据,这里用到了两种,一种是在url中带参数,一种是json数据发送方式;

    url带参数的写法:

    url+/?r=m/calendar/contact_list&uid=3&&subscriptionslist[pageindex]=10&subscriptionslist[recordlimit]=10

    从“&”符号之后一连串都是参数。

    发送方式代码编写:

    DefaultHttpClient httpClient = new DefaultHttpClient();

            HttpPost httpPost = new HttpPost(HttpUtil.BASIC_URL
                    + HttpUtil.SUBSCRIPTION_URL);
            try{
                if (cookie != null) {
                   // httpClient.setCookieStore(LoginJsonUtil.cookie);
                    List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);

                    nameValuePair.add(new BasicNameValuePair("uid",
                            uid));
                    nameValuePair.add(new BasicNameValuePair("subscriptionslist[pageindex]",
                            subscriptionslist_pageindex));
                    nameValuePair.add(new BasicNameValuePair("subscriptionslist[recordlimit]",
                            subscriptionslist_recordlimit));

                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));

    传递参数使用nameValuePair。

    如果使用cookie的话,使用上段代码中注释掉的部分

    httpClient.setCookieStore(LoginJsonUtil.cookie);

    使用json数据格式发送信息向服务器端:

    HttpClient httpClient = new DefaultHttpClient();
            try {

                HttpPost httpPost = new HttpPost(BASIC_URL + url);

                List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
                JSONObject jsonObject = new JSONObject();
                JSONObject jsonObject2 = new JSONObject();

                jsonObject.put("uemail", userbean.getEmail());
                jsonObject.put("password", userbean.getPassword());

                jsonObject2.put("userbean", jsonObject);

                nameValuePair.add(new BasicNameValuePair("jsonString", jsonObject
                        .toString()));

                Log.i("lifeweeker", jsonObject2.toString());
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));

    这里每个put的顺序我不清楚有没有规定,我是严格按照提供的前后顺序来组合json数据格式的。

    前面我有用到android发送json数据;这里我想总结一下我用到的解析json数据格式的方式

    json数据格式解析我自己分为两种;

    一种是普通的,一种是带有数组形式的;

    普通形式的:

    服务器端返回的json数据格式如下:

    {"userbean":{"Uid":"100196","Showname":"u75afu72c2u7684u7334u5b50","Avtar":null,"State":1}}

    分析代码如下:

    // TODO 状态处理 500 200
                    int res = 0;
                    res = httpClient.execute(httpPost).getStatusLine().getStatusCode();
                    if (res == 200) {
                       
                        HttpResponse httpResponse = httpClient.execute(httpPost);
                        StringBuilder builder = new StringBuilder();
                        BufferedReader bufferedReader2 = new BufferedReader(
                                new InputStreamReader(httpResponse.getEntity().getContent()));
                        String str2 = "";
                        for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2
                                .readLine()) {
                            builder.append(s);
                        }
                        Log.i("cat", ">>>>>>" + builder.toString());

    JSONObject jsonObject = new JSONObject(builder.toString())
                            .getJSONObject("userbean");

                    String Uid;
                    String Showname;
                    String Avtar;
                    String State;

                    Uid = jsonObject.getString("Uid");
                    Showname = jsonObject.getString("Showname");
                    Avtar = jsonObject.getString("Avtar");
                    State = jsonObject.getString("State");

    带数组形式的:

    服务器端返回的数据格式为:

    {"calendar":
        {"calendarlist":
                [
                {"calendar_id":"1705","title":"(u4eb2u5b50)ddssd","category_name":"u9ed8u8ba4u5206u7c7b","showtime":"1288927800","endshowtime":"1288931400","allDay":false},
                {"calendar_id":"1706","title":"(u65c5u884c)","category_name":"u9ed8u8ba4u5206u7c7b","showtime":"1288933200","endshowtime":"1288936800","allDay":false}
                ]
        }
    }

    分析代码如下:

    // TODO 状态处理 500 200
                    int res = 0;
                    res = httpClient.execute(httpPost).getStatusLine().getStatusCode();
                    if (res == 200) {
                       
                        HttpResponse httpResponse = httpClient.execute(httpPost);
                        StringBuilder builder = new StringBuilder();
                        BufferedReader bufferedReader2 = new BufferedReader(
                                new InputStreamReader(httpResponse.getEntity().getContent()));
                        String str2 = "";
                        for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2
                                .readLine()) {
                            builder.append(s);
                        }
                        Log.i("cat", ">>>>>>" + builder.toString());
                       
                        JSONObject jsonObject = new JSONObject(builder.toString())
                                .getJSONObject("calendar");
                        JSONArray jsonArray = jsonObject.getJSONArray("calendarlist");
                        for(int i=0;i<jsonArray.length();i++){
                            JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);
                            CalendarInfo calendarInfo = new CalendarInfo();
                            calendarInfo.setCalendar_id(jsonObject2.getString("calendar_id"));
                            calendarInfo.setTitle(jsonObject2.getString("title"));
                            calendarInfo.setCategory_name(jsonObject2.getString("category_name"));
                            calendarInfo.setShowtime(jsonObject2.getString("showtime"));
                            calendarInfo.setEndtime(jsonObject2.getString("endshowtime"));
                            calendarInfo.setAllDay(jsonObject2.getBoolean("allDay"));
                            calendarInfos.add(calendarInfo);
                        }

    总结,普通形式的只需用JSONObject ,带数组形式的需要使用JSONArray 将其变成一个list。

  • 相关阅读:
    Swoole实战之手撸HttpServer框架 16 关于服务的平滑重启与热加载与cli_set_process_title函数的使用、添加前置进程、修改代码服务器自动热更新
    Swoole实战之手撸HttpServer框架 17 里程碑 整合前置进程、热更新、Ioc容器
    axios取消请求
    echarts使用transform缩放后导致图标模糊
    vuex4的简单使用
    Vite 按需引入 Ant Design Vue 3.0
    TS声明promise返回来的数据类型
    JavaScript一种新的数据结构类型Map
    CF1453D Checkpoints(期望)
    PLOP: Learning without Forgetting for Continual Semantic Segmentation论文阅读笔记
  • 原文地址:https://www.cnblogs.com/hanfeihanfei/p/5590913.html
Copyright © 2020-2023  润新知