美文网首页
Retrofit2+Okhttp3简单集成

Retrofit2+Okhttp3简单集成

作者: 加油小李 | 来源:发表于2020-08-18 00:16 被阅读0次

第一步: 在Manifast.xml文件下添加网络访问权限

<uses-permission android:name="android.permission.INTERNET"/>

添加网络访问权限

第二步:引入依赖

引入下面四个必须用到的四个依赖(日志过滤器非必须)

//okhttp3网络请求框架

implementation'com.squareup.okhttp3:okhttp:3.9.0'

//retrofit2依赖

implementation"com.squareup.retrofit2:retrofit:2.3.0"

//ConverterFactory的Gson依赖包

implementation"com.squareup.retrofit2:converter-gson:2.3.0"

//日志过滤器

implementation'com.squareup.okhttp3:logging-interceptor:3.9.1'

引入依赖

第三步:定义一个类用来放置所有接口

一般往服务器提交的数据都用@FormUrlEncoded注解然后根据项目要求使用@POST或者@GET请求方法,如果是Post请求,请求参数必须加上@Field注解或者一个 @FieldMap的集合注解如果是@GET 请求的话一般用 参数一般用@Query注解而不需要在请求方法前面声明@FormUrlEncoded注解

import com.example.listenphone.bean.MyContacts;

import com.example.listenphone.bean.MySms;

import retrofit2.Call;import retrofit2.http.Field;

import retrofit2.http.FormUrlEncoded;

import retrofit2.http.POST;

public interface ApiService { 

 /** * 表单类型都用@FormUrlEncoded注解 * @return */ @FormUrlEncoded 

//api_msg.shtml是接口地址,sms是参数名称

 @POST("api_msg.shtml") 

 Call<MySms> putSms(@Field("sms")String sms);

}

接口类


第四步:实现HttpLoggingInterceptor.Logger类重写Log方法一边将请求和相应结果打印在日志上(方便调试问题所在)

import android.util.Log;

import okhttp3.logging.HttpLoggingInterceptor;

public class HttpLoggerimplements HttpLoggingInterceptor.Logger {

@Override

    public void log(String message) {

Log.d("httpInfo", message);

    }

}


日志工具类



第五步: 封装请求实体

如果不会写照抄下面代码就行(把BASE_URL的值换成自己项目中的地址)

mport java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;

import okhttp3.logging.HttpLoggingInterceptor;

import retrofit2.Retrofit;

import retrofit2.converter.gson.GsonConverterFactory;

public class HttpTools {

//最外层的URL后面拼接接口名在ApiService里面

    public static final StringBASE_URL ="http://134.73.236.62:8080/web/";

    public static ApiServicegetApiService() {

HttpLoggingInterceptor logInterceptor =new HttpLoggingInterceptor(new HttpLogger());

        logInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient.Builder httpClient =new OkHttpClient.Builder();

        OkHttpClient client = httpClient

.connectTimeout(10, TimeUnit.SECONDS)

.readTimeout(10, TimeUnit.SECONDS)

.writeTimeout(10, TimeUnit.SECONDS)

.addNetworkInterceptor(logInterceptor)

.build();

        Retrofit retrofit =new Retrofit.Builder()

.baseUrl(BASE_URL)

.addConverterFactory(GsonConverterFactory.create())

.client(client)

.build();

        ApiService apiService = retrofit.create(ApiService.class);

        return apiService;

    }

}

封装retrofit实体类

第六步:执行异步请求方法

执行异步请求很简单直接 拿到请求实体类调用接口类对象的接口方法

然后将上一步生成的对象执行enquere方法传入Callback接口就会生成请求成功和失败的俩个回调方法 最后在成功和失败的回调方法里面写相应逻辑.

Call mySmssCall1 = HttpTools.getApiService().putSms(sbSms.toString());

mySmssCall1.enqueue(new Callback() {

@Override

    public void onResponse(Call call, Response response) {

// 这里面处理请求成功的逻辑

        Toast.makeText(TextActivity.this,"上传短信成功",Toast.LENGTH_SHORT).show();

    }

@Override

    public void onFailure(Call call, Throwable t) {

//这里处理请求失败的逻辑

        Toast.makeText(TextActivity.this,"上传短信失败",Toast.LENGTH_SHORT).show();

    }

});

执行异步请求

END

相关文章

网友评论

      本文标题:Retrofit2+Okhttp3简单集成

      本文链接:https://www.haomeiwen.com/subject/ekwkdktx.html