Android——Retrofit2

Retrofit2是一种为Android和Java提供安全的HTTP客户端,即是一种http客户端框架。可以访问网络请求并将访问的数据转换成你想要的类型。

相关api:http://square.github.io/retrofit/

1.Retrofit2入门

首先在gradle中添加retrofit库和网络权限

  1. 定义接口。

  使用Retrofit ,首先需要将你的HTTP API改造成Java接口。例如,

 

public interface ApiService {
    @GET("StudentInq")
    Call<ResponseBody> getStudents();
}

ApiService 接口定义了一个方法getStudents(),@GET表示该方法是GET请求,该方法没有参数,@GET("StudentInq")中的“StudentInq”是path(相对URL),这个path和baseUrl一起组成了接口的请求全路径,例如baseUrl是“http://localhost:8080/mServer/”,那么全路径就是“http://localhost:8080/mServer/getStudent”。(baseUrl下文会提到)

 

  2. 实例化Retrofit。 

     a. 首先定义了服务请求的URL,

// 服务请求url

public static final String API_URL = "http://localhost:8080/mServer/";

这个API_URL就是baseUrl,是由ip和端口等组成。

PS: 请求URL,需要以“/”结尾,否则会报错。(敲黑板)

   b. 创建Retrofit 实例,

	Retrofit retrofit = new Retrofit.Builder().baseUrl(API_URL).build();

通过构造者模式创建了Retrofit ,其中设置了请求的

baseUrl。

     c. 接着创建接口实例,

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

从源码中可以得知,内部使用 了动态代理模式。

    d. 下面就可以调用接口中的方法了,

 

// 调用具体接口方法

Call<ResponseBody> call = service.getStudents();

//异步执行请求

call.enqueue(...);

如果是同步请求,调用execute;而发起一个异步请求则调用enqueue。

完整代码如下:


public class GetTest {
 
	// 服务请求url
	public static final String API_URL = "http://localhost:8080/mServer/";
 
	public interface ApiService {
 
		@GET("StudentInq")
		Call<ResponseBody> getStudents();
	}
 
	public static void main(String[] args) {
		getList();
	}
 
	/**
	 * 获取数据
	 */
	private static void getList() {
		// 创建Retrofit实例
		Retrofit retrofit = new Retrofit.Builder().baseUrl(API_URL).build();
		// 生成ApiService接口代理
		ApiService service = retrofit.create(ApiService.class);
		// 调用具体接口方法
		Call<ResponseBody> call = service.getStudents();
		//异步执行请求
		call.enqueue(new Callback<ResponseBody>() {
 
			@Override
			public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
				// TODO Auto-generated method stub
				try {
					System.out.println(response.body().string());
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
 
			@Override
			public void onFailure(Call<ResponseBody> arg0, Throwable arg1) {
				// TODO Auto-generated method stub
 
			}
		});
	}
 
}

 

### 如何在 Android Studio 中使用 Retrofit2 进行网络请求 #### 定义接口 定义一个用于发起网络请求的接口,指定HTTP方法和URL路径。例如,在Java中可以这样定义: ```java import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Path; interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> getListRepos(@Path("user") user); } ``` 此部分展示了如何构建一个简单的API接口来获取GitHub用户的仓库列表[^1]。 #### 封装 GET 请求 对于不带参数的GET请求,可以通过`RetrofitUtil.get()`方法来进行封装调用,并通过回调处理成功响应或错误情况: ```java RetrofitUtil.get("/xx/xx", new RetrofitCallback() { @Override public void onSuccess(String resultJsonString) {} @Override public void onError(Throwable t) {} }); ``` 上述代码片段说明了怎样利用自定义工具类简化GET类型的无参请求操作[^2]。 #### 实例化 API 接口并发出异步请求 为了执行实际的网络交互,需先基于Retrofit对象创建对应的API服务实例;之后便能轻松地启动异步任务: ```java Api api = retrofit.create(Api.class); // 使用api变量去触发具体的网络请求... ``` 这里描述的是在一个Activity内部完成整个流程的方式——即初始化API代理和服务端通讯过程[^3]。 #### 配置 ProGuard 混淆规则 (可选) 当项目启用ProGuard混淆功能时,应适当调整设置以免破坏Retrofit的功能特性: ```proguard -dontwarn retrofit.** -keep class retrofit.** { *; } -keepattributes Signature -keepattributes Exceptions ``` 这些指令确保即使经过编译优化后的应用程序仍能够正常工作而不影响到第三方库的行为模式[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值