本文利用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 {
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数据。因为在子线程中是不可以进行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);
} 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...