添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

本文利用okhttp,需要自行添加。
访问网站:https://github.com/square/okhttp
在app/build.gradle中dependencies添加如下内容(注意,这是目前最新版本,版本更新则根据该网站提供)

implementation("com.squareup.okhttp3:okhttp:4.5.0")

如果你的android studio 版本低于3.0,应该使用

compile("com.squareup.okhttp3:okhttp:4.5.0")

准备工作完成,下面开始介绍。
首先,新建一个java类,该类只定义一个方法,用于接收路由和json字符串,并产生一个回调方法供后续处理。需要注意的是在enqueue()方法内部已经开启子线程了。

public class HttpUtil {
    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8")public static void sendOkHttpRequest(final String address,final String json, final okhttp3.Callback callback) {
        OkHttpClient client = new OkHttpClient();
        RequestBody requestBody = RequestBody.create(json, JSON);
        Request request = new Request.Builder()
                .url(address)
                .post(requestBody)
                .build();
        client.newCall(request).enqueue(callback);

接下来,讲解如何调用。该例子以提交用户名和密码为例,实际情况可以自己改,假设有个控件mBtnpost,对其监听。如果需要提交较为复杂数据,可以进行嵌套,本文不讲。

mBtnpost.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try {
            sendRequestOkHttp();
        } catch (JSONException e) {
            e.printStackTrace();
});
private void sendRequestOkHttp() throws JSONException {
    //构建json数据
    JSONObject json = new JSONObject();
    json.put("usename","admin"); 
    json.put("password","123456");
    //实际路由
    String url ="http://xxx";
    //实例化
    HttpUtil httpUtil = new HttpUtil();
    httpUtil.sendOkHttpRequest(url, json.toString(), new okhttp3.Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            httpError(); //对异常情况处理
        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String responsedata = response.body().string();
            parsejson(responsedata);   //解析从服务器返回json数据
    });

接下来实现如何解析服务器返回json数据。因为在子线程中是不可以进行UI操作的,所以要用runOnUiThread方法回到主线程。我们这里假设服务器返回{“ret”:“0”},并把0进行显示。当然这里用最简单的方式,如果需要解析较为复杂的,可以参考其它博文。

private void parsejson( final String jsonData){
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            try {
                JSONObject jsonObject = new JSONObject(jsonData);
                String ret = jsonObject.optString("ret");
                text.setText(ret);//假设屏幕有个text控件,显示出来
            } catch (JSONException e) {
                e.printStackTrace();
    });

若出现异常,可以在这里进行相关处理,默认你要进行UI操作,用了 runOnUiThread()f方法,不需要则自行修改。

private void httpError(){
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
    });

本文仅针对json数据进行传输,提供一个简单思路,而且解析内容较为简单。若是要传递文件等复杂内容,请参考其它博文。

package com.http.test; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.... 设置完成了请求头之后就可以将数据写入到缓存,也就是获取conn的输出流,然后write我们拼接好的数据,刷新关闭流就可以了;然后让项目同步下载一下就可以使用gson这个工具了;又是通过字符串的方式来传递的,所以在网络通讯中有很大的用途;我们先要将请求方式设置为POST,然。1、发送post请求。2、Json数据格式。 获取MediaType对象,类型为application/json,字符集为utf-8 通过RequestBody.create()方法创建JSON请求主体 创建请求对象,需要往请求头里添加参数也是在这里添加 //创建一个OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.Ou... 最近在单位闲着没事,正好单位要采集一部分卡口的地理位置信息,本想做成单机版,到时候再导出excel数据进行汇总,可是一想,一千三百的采集点,这样每个人有可能会重复采集,而且对整个采集进度把握也不是很好,于是想做成网络版的。可网上又是看教程,又是读文章,写代码,走了好多弯路,而且,对于整个数据的传递思路不清,现在记录下整个开发过程,对于自己想要写整套系统的朋友来说,可以参考一下。IP地址填写本机的局域网IP地址,比如:192.168.1.105,端口号保持80不变,你也可以自己设置端口号。 在最近的项目中有个需求是这样的:入参封装成JSON,EXAMPLE:{ "uuid": "iamauuid","clientType": "AND","content": "{\"gender\":\"F\",\"name\":\"TTT\"}"}其中content中是json的object,且要求把content中特殊的字符进行转义。主要代码如下:/*** post请求用json的格式传递数据给... 我正在使用下面的代码发送http POST请求,该请求将对象发送到WCF服务。可以,但是如果我的WCF服务还需要其他参数怎么办?如何从Android客户端发送它们?这是我到目前为止编写的代码:StringBuilder sb = new StringBuilder();String http = "http://android.schoolportal.gr/Service.svc/SaveVal...