Loading... #依赖包 首先添加jar包,或着用maven或gradle自动导包。(我用的是3.9.1的包,自动导包时注意实际情况) ``` maven: <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.9.1</version> </dependency> gradle: compile 'com.squareup.okhttp3:okhttp:3.9.1' ``` 注意:还需要okio的包 ``` maven: <dependency> <groupId>com.squareup.okio</groupId> <artifactId>okio</artifactId> <version>1.13.0</version> </dependency> gradle: compile 'com.squareup.okio:okio:1.13.0' ``` #GET请求 ```java String path="http://rehtt.cn"; OkHttpClient okHttpClient=new OkHttpClient(); Request request=new Request.Builder() .url(path) //如果要在request的的header添加参数。例如Cookie,User-Agent什么的: .header("键", "值") .header("键", "值") .build(); Call call=okHttpClient.newCall(request); try { Response response = call.execute(); Log.i("返回:",response.body().string()); //返回网页body标签内容 //body()有多种输出方法,如果是下载文件就是response.body().bytes(),response.code()获取返回的状态码 } catch (IOException e) { e.printStackTrace(); } ``` #POST请求 post请求与get请求几乎一样,只是post需要提交表单,使用RequestBody。 RequestBody的数据格式都要指定Content-Type,常见的有三种: ```application/x-www-form-urlencoded``` 数据是个普通表单 ```multipart/form-data``` 数据里有文件 ```application/json``` 数据是个json ##普通表单: ```java RequestBody body = new FormBody.Builder() .add("键", "值") .add("键", "值") ... .build(); ``` ##文件表单: ```java RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("file", file.getName(),RequestBody.create(MediaType.parse("image/png"), file)) .build(); ``` 另外如果你上传一个文件不是一张图片,但是MediaType.parse(“image/png”)里的”image/png”不知道该填什么,可以参考这个。 ##JSON表单: ```java MediaType JSON = MediaType.parse("application/json; charset=utf-8"); RequestBody body = RequestBody.create(JSON, "传入的json"); ``` ##同步与异步 上文采用call.execute()执行http请求,但这是一个同步动作,是在主线程运行的。如果在UI线程执行就会抛异常。 所以在UI线程执行就要用异步,将call.execute()替换: ```java call.enqueue(new Callback() { @Override //请求失败调用 public void onFailure(Call call, IOException e) { } @Override //请求成功调用 public void onResponse(Call call, Response response) throws IOException { Log.e("返回:",response.body().string()); } }); ``` onFailure()和onResponse()是在异步线程里执行的,所以如果你在Android把更新UI的操作写在这两个方法里面是会报错的,这个时候可以用runOnUiThread这个方法。 Last modification:October 23, 2019 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 0 如果觉得我的文章对你有用,请随意赞赏
2 comments
你的文章让我感受到了正能量,非常棒!http://www.bcylc847.com
你的文章让我学到了很多知识,非常感谢。http://www.lqmczd.com