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>
}

注解类型(有三类)

  • 第一类:网络请求方法(Get和Post):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/”

  • 第二类:标记
@Streaming(表示返回的数据以流的形式返回)
@FormUrlEncoded	每个键值对需要用@Filed来注解键名,随后的对象需要提供值
@Multipart 需要用@Part来注解键名

例子:

@POST("/form")
@FormUrlEncoded
Call<ResponseBody> testForm(@Field("username") String name, @Field("age") int age);

@POST("/form")
@Multipart
Call<ResponseBody> testFileUpload(@Part("name") RequestBody name, @Part("age") RequestBody age, @Part MultipartBody.Part file);	

Multipart有三种类型 {@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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值