Android——Retrofit网络请求

Retrofit使用步骤

步骤1:添加库和网络权限

compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.2.0'
<uses-permission android:name="android.permission.INTERNET"/>

步骤2:创建接收服务器返回数据的类

public class Reception{
    //根据返回数据的格式和数据解析方式定义
}

步骤3:创建用于描述网络请求的接口

Retrofit将Http请求抽象成Java接口:采用 注解 描述网络请求参数和配置网络请求参数

接口中的每个方法的参数都需要使用注解,否则会报错

public interface GetRequest_Interface{
    @GET()	//采用get方法发送网络请求
    Call<Translation> getCall();
    //getCall()是接收网络请求数据的方法
    //返回类型为Call<*>,*是接收数据的类
    //如果想直接获得Responsebody,可定义为Call<ResponseBody>
}

注解类型(有三类)

  • 第一类:网络请求方法:Retrofit把网络请求的URL分成了两部分设置

第一部分:网络请求接口的注解设置 @GET(test.html?username=123)
第二部分:创建Retrofit实例时通过 .baseUrl() 设置

Retrofit retrofit = new Retrofit.Builder()
                                .baseUrl("http://www.baidu.com/")	//设置网络请求的url地址
                                .addConverterFactory(GsonConverFactory.create())	
                                .build();

网络请求完整的Url = .baseUrl() + 网络请求接口的注解设置(也叫path)

整合规则:path = 相对路径,baseUrl = 目录形式
比如:Url = “http://www.baidu.com/test.html?username=123
那么 path = “test.html?username=123”,baseUrl = “http://www.baidu.com/

  • 第二类:标记
@FormUrlEncoded(表示请求体是一个Form表单)
@Multipart(表示是一个支持文件上传的Form表单)
@Streaming(表示返回的数据以流的形式返回)
@FormUrlEncoded	每个键值对需要用@Filed来注解键名,随后的对象需要提供值
@Multipart 需要用@Part来注解键名

public interface GetRequest_Interface {
    @GET()	//采用get方法发送网络请求
    Call<Translation> getCall();
    //getCall()是接收网络请求数据的方法
    //返回类型为Call<*>,*是接收数据的类
    //如果想直接获得Responsebody,可定义为Call<ResponseBody>
}

例子:

@POST("/form")	//表明这是一个表格请求
@FormUrlEncoded
Call<ResponseBody> testForm(@Field("username") String name, @Field("age") int age);	//表示String name中的name的值作为username的值

@POST("/form")	//表明这是一个表格请求
@Multipart
Call<ResponseBody> testFileUpload(@Part("name") RequestBody name, @Part("age") RequestBody age, @Part MultipartBody.Part file);	

有三种类型 {@Part RequestBody}、{@Part MultipartBody.Part}、任意类型 (除了第二种之外,其他都必须带上表单字段)

  • 第三类:网络请求参数
    重点是 @Query@QueryMap
    作用:用于@GET方法的查询参数(就是Url中“?”后面的键值对)
    如:url = http://www.baidu.com/test.html?username=123 (其中 Query = username)

@GET()
Call test(@Query(“username”) String name)

步骤4:创建Retrofit实例

Retrofit retrofit = new Retrofit.Builder()
                                .baseUrl("http://www.baidu.com/")	//设置网络请求的url地址
                                .addConverterFactory(GsonConverFactory.create())	//设置解析器
                                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())	//支持RxJava
                                .build();

步骤5:创建网络请求接口实例

// 创建 网络请求接口 的实例
GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);
//对 发送请求 进行封装
Call<Reception> call = request.getCall();

步骤6:发送网络请求(异步/同步)

异步

call.enqueue(new Callback<Translation>() {
   	//请求成功时回调
   	@Override
	public void onResponse(Call<Translation> call, Response<Translation> response) {
        	//请求处理,输出结果
        	response.body().show();
   	}

    //请求失败时候的回调
    @Override
	public void onFailure(Call<Translation> call, Throwable throwable) {
        System.out.println("连接失败");
    }
});

同步

Response<Reception> response = call.execute();

步骤7:处理返回数据

response.body()

猜你喜欢

转载自blog.csdn.net/weixin_42164949/article/details/84023321