第一步: 在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;
}
}

第六步:执行异步请求方法
执行异步请求很简单直接 拿到请求实体类调用接口类对象的接口方法
然后将上一步生成的对象执行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
网友评论