频道栏目
首页 > 资讯 > JavaScript > 正文

Okhttp网络方式post发送之Json解析

17-11-20        来源:[db:作者]  
收藏   我要投稿

前面已经进行了okhttp的get的请求,现在进行okhttp的post请求,get请求快,方便,不安全,post请求的参数通过流传递过去的,下面看post是如何进行请求的。

1.首先创建一个请求客户端

OkHttpClient okHttpClient = new OkHttpClient();
2.创建请求对象之前,需要创建一下请求的参数FormBody,里面采用键值对的方式,就是把url拆了相比于get
 FormBody body=new FormBody.Builder().add("showapi_appid","48962")
                .add("topid","5")
                .add("showapi_sign","9ad486a2461e47f4b3391171911f5b4b").build();
3.在创建一条请求
Request request=new Request.Builder().url("http://route.showapi.com/213-4").post(body).build();
4.执行请求,异步请求有一个callback的回调,这个时候请求成功的话需要在发一个handler或runOnUiThread(),这个方法也是可以的。
 okHttpClient.newCall(request).enqueue(callback);
5.现在拿到了数据,一大堆数据,需要把它解析成对象,一首一首拆出来,json解析,相比于xml解析代码少的多,东西比xml少,一个json如何变成对象。

第一种:jsonobject解析 好处:只解析想要的部分。第二:gson解析,一建解析

首先第一种解析创建一个class,javabean包,然后在自己一步步写,很麻烦,容易出错,就不写了,写不好。

然后第二种解析安卓里面有一个插件一建生成对象。如何打插件呢?

1.setting里面的Plugins,选择中间那个Browes reposition就可以了进行仓库下载

//这个是完整的okhttp的post请求加json解析的代码

2.建一个class,叫jostop,同时通过安卓studio生成构造Alt+Ins快速生成构造点击里面的JsonFormat,然后复制json代码到里面,就ok了

3.有了对象,有解析方式如何解析

 Gson gson=new Gson();
4.采用gson的fromJson的方法,把一个字符串转换成为一个jsontop对象,拿到了Json对象就可以拿到里面的东西了

josntop bean=gson.fromJson(response.body().string(),josntop.class); final ArrayList list= (ArrayList) bean.getShowapi_res_body().getPagebean().getSonglist();
5.不发handler了,直接使用这个办法进行展示,在子线程中调用runOnUiThread();
 runOnUiThread(new Runnable()
                {
                    @Override
                    public void run()
                    {
//                        Iterator it1 = list.iterator();
//                        while(it1.hasNext()){
////                            TEX.setText();
//
//                        }
                        for(int i=0;i//                            Log.e("msg", list.get(i).getSingername()+"");
                            TEX.append(list.get(i).getSingername());
                        }

                    }

                });
            }
        };

//post完整代码

public class networkActivity extends AppCompatActivity {
    private Button butt;
    private TextView TEX;

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            //规定传1代表有数据
//            butt.setText(buff.toString());
//            TEX.setText(buff.toString());
            if(msg.what==2)
            {
                TEX.setText(msg.obj.toString());
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_network);
        butt = (Button) findViewById(R.id.button);
        TEX = (TextView) findViewById(R.id.textView6);
//        httpconn();
//        okhttp();
        post();

    }
 public void post()
    {
        OkHttpClient okHttpClient = new OkHttpClient();
        FormBody body=new FormBody.Builder().add("showapi_appid","48962")
                .add("topid","5")
                .add("showapi_sign","9ad486a2461e47f4b3391171911f5b4b").build();

                 Request request=new Request.Builder().url("http://route.showapi.com/213-4").post(body).build();
        Callback callback=new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException
          {
//                Message mes=new Message();
//                mes.obj=response.body().string();
//                        mes.what=2;
//                       handler.sendMessage(mes);
                Gson gson=new Gson();
                josntop bean=gson.fromJson(response.body().string(),josntop.class);
             final ArrayList list= (ArrayList) bean.getShowapi_res_body().getPagebean().getSonglist();


//                final String res=response.body().string();
                runOnUiThread(new Runnable()
                {
                    @Override
                    public void run()
                    {
//                        Iterator it1 = list.iterator();
//                        while(it1.hasNext()){
////                            TEX.setText();
//
//                        }
                        for(int i=0;i//                            Log.e("msg", list.get(i).getSingername()+"");
                            TEX.append(list.get(i).getSingername());
                        }

                    }

                });
            }
        };
        okHttpClient.newCall(request).enqueue(callback);
    }

}
相关TAG标签
上一篇:SSM框架css/js/images等静态资源无法加载的解决办法
下一篇:PHP如何判断是否为AJAX请求?
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站