大项目模块三 | 青训营笔记

244 阅读2分钟

项目实践三 | 青训营笔记

这是我参与「第四届青训营」笔记创作活动的的第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_KEYCLIENT_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 就是上下文,可以是 ApplicationContext
    • text就是 CharSequence 文字
    • duration 可以为 Toast.LENGTH_SHORT或者Toast.LENGTH_LONG,分别代表不同的持续时长

  • 注意:最后需要调用其show()方法。