项目实践三 | 青训营笔记
这是我参与「第四届青训营」笔记创作活动的的第13天;
用于记录开发过程中学习到的知识点。
OKHttp的简单使用
由于项目需要使用到抖音
OoenApi接口,所以采用OKHttp进行读取数据。
- 概念:一个处理网络请求的开源项目,是安卓端最火热的轻量级框架。
OkHttp是一款十分好用的Android网络框架,尽管官方提供了UrlConnection,但是OkHttp依然是最为广泛使用的网络请求方式。
Okhttp有以下特性:- 支持
HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接使连接池减少请求延时; - 透明的
GZIP压缩减少响应数据的大小 缓存响应内容,避免一些完全重复的请求; OkHttp支持任何Android 2.3以上平台,并且需要JDK 1.7以上。
- 支持
- 导入
Okhttp:implementation 'com.squareup.okhttp3:okhttp:3.2.0' Get请求(这里我采用异步的请求方式):-
理论构建:
- 首先,我们创建一个
okhttp客户端;也就是OKhttpClient的对象,new一个OKHttpClient.Builder().build(); - 然后,创建
Request对象,首先要声明我们是Get(),发送的是Get请求 - 其次,填上需要
请求的url、对应的响应头和必要的参数,最后build封装 - 最后,创建一个
call对象,将request封装进去,接下来用enqueue方法将request发送出去 - 我们去请求之后,对方肯定会返回一个响应,也就是
response,我们就需要用一个response去接收这个返回的响应
- 首先,我们创建一个
-
使用案例:
- 通过
CLIENT_KEY和CLIENT_SECRET从开发者平台中获取access_token用于身份验证。
代码示例:
public Request getTokenHttp(){ // 获取token HttpUrl.Builder urlBuilder = Objects. requireNonNull(HttpUrl.parse("https://open.douyin.com/oauth/client_token/")) .newBuilder(); HttpUrl url = urlBuilder.addQueryParameter("client_key", Constants.CLIENT_KEY) .addQueryParameter("client_secret", Constants.CLIENT_SECRET) .addQueryParameter("grant_type", "client_credential").build(); return new Request.Builder() .url(url) .addHeader("Content-Type", "multipart/form-data") .get() .build(); }- 获取
access_token后继续进行GET请求获取相应的JSON数据。
代码示例:
public void doGetToken(Request request,CallBacks callBacks){ Call call=okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(@NonNull Call call, @NonNull IOException e) { handler.post(new Runnable() { @Override public void run() { callBacks.onError(e); } }); } @Override public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { String dataString=null; Log.d(TAG, "onResponse: 获取client_token的请求码:" + response.code()); if (response.code() != 200) { return; } ResponseBody responseBody = response.body(); if (responseBody == null) { Log.d(TAG,"MISTAKE1"); return; } dataString=responseBody.string(); Log.d(TAG, "onResponse: 获取client_token成功, 获取到的数据为:" + dataString); String token=null; JSONObject jsonObject=null; try { jsonObject=new JSONObject(dataString); JSONObject object1=jsonObject.getJSONObject("data"); token=object1.getString("access_token"); }catch (Exception e){ e.printStackTrace(); } Log.d(TAG, "token:" + token); String finalToken = token; handler.post(new Runnable() { @Override public void run() { callBacks.onSuccess(finalToken); } }); } }); } - 通过
-
响应结果:
-
Toast的使用
官方定义:消息框可以在一个小型弹出式窗口中提供与操作有关的简单反馈。它只会填充消息所需的空间大小,并且当前activity会一直显示及供用户与之互动。超时后,消息框会自动消失。
- 使用:
Toast.makeText(context, text, duration).show()
- 分析:
context就是上下文,可以是ApplicationContexttext就是CharSequence文字duration可以为Toast.LENGTH_SHORT或者Toast.LENGTH_LONG,分别代表不同的持续时长
- 注意:最后需要调用其
show()方法。