1、retrofit是一个流行的网络加载框架,封装网络请求接口,并通过底层OKhttp完成网络请求。
减少调用网络时所需的代码量,支持很多开源库(json等),请求速度快,降低api的耦合程度
2、retrofit简单应用
①导包
// Okhttp库
implementation 'com.squareup.okhttp3:okhttp:3.1.2'
// Retrofit库
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
②设置权限
<uses-permission android:name="android.permission.INTERNET"/>
③设置网络请求接口
package com.mengfeiyang.retrofitlearn;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
public interface BookService {
@GET("page/{id}") //@GET方法获取网络请求
Call<ResponseBody> getPage(@Path("id") int id); //自定义getPage方法,返回ResponseBody类 型数据,即api原始数据;
//@Path方法通过路径将page/id插入到网站地 址之后
}
④MainActivity编写
package com.mengfeiyang.retrofitlearn;
import androidx.appcompat.app.AppCompatActivity;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import android.os.Bundle;
import android.util.Log;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实例化Retrofit对象,并与api地址建立连接
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://gank.io/api/xiandu/data/id/appinn/count/10/")
.build();
//实例化网络请求接口
BookService bookService = retrofit.create(BookService.class);
//调用网络请求接口方法,并输入数据
Call<ResponseBody> call = bookService.getPage(1);
//发送网络请求(与api地址进行连接)
call.enqueue(new Callback<ResponseBody>() {
//成功建立连接调用的方法
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try {
String s = response.body().string(); //将获得的原始数据转变为字符串
Log.e("1",s);
} catch (IOException e) {
e.printStackTrace();
}
}
//连接建立失败调用的方法
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.e("2",t.toString());
}
});
}
}
3、拓展
三类注解配置
a.网络请求方法,除了@GET方法外,还有@POST、@PUT等方法,这些都是HTTP的网络请求方式,@GET发起网 络请求,从服务器中获取数据;而@POST则是发送数据到服务器
b.网络请求参数,@PATH是URL的补充,插入baseUrl的后面,构成完整的网站地址
PATH:相对路径word;文件形式https://www.baidu.com/,完整URL即https://www.baidu.com/word
c.标记类,@FormUrlEncoded,表示请求体是一个form表单,如果baseURL需要的是表单信息,则用此标记类标识。
4、总结
retrofit使用步骤:
(1)导包
(2)编写接收从服务器端获取到原始数据的类
(3)编写网络请求接口
(4)实例化retrofit
(5)实例化网络请求接口及配置注解参数
(6)发起网络请求(异步/同步)
(7)处理从服务器获取的数据