Android开发——Post Json数据给服务器并解析返回Json数据

本文利用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数据进行传输,提供一个简单思路,而且解析内容较为简单。若是要传递文件等复杂内容,请参考其它博文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值