登陆网络请求的Retrofit实现「新手」
介绍:Retrofit和OkHttp一样都是Square公司开发的,是针对Android网络请求的框架,Retrofit2底层就是基于OkHttp实现的,相当于对OkHttp做了一层封装。
首先需要在gradle里面导入所需要的包
compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:retrofit-converters:2.2.0'
compile 'com.squareup.retrofit2:retrofit-adapters:2.2.0'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
- 1
- 2
- 3
- 4
- 5
新建一个LoginActivity
这里可以直接用as自带的模版来创建,这个login模版结构清晰。创建完了先放着,一会儿来实现里面登录的网络请求。
在manifest.xml中将这个Activity设为主Activity,方便一开虚拟机就能看到界面
<activity
android:name=".Identification.view.LoginActivity"
android:label="@string/title_activity_login">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
首先写一个封装登陆信息的bean
这个bean里面封装的是response返回过来的信息
public class StudentBean {
@SerializedName("name")
private String name;
@SerializedName("type")
private String type;
@SerializedName("avatar")
private String avatar;
@SerializedName("gender")
private String gender;
@SerializedName("email")
private String email;
@SerializedName("gitId")
private String gidId;
@SerializedName("number")
private String number;
public String getName() {
return name;
}
public String getType() {
return type;
}
public String getAvatar() {
return avatar;
}
public String getGender() {
return gender;
}
public String getEmail() {
return email;
}
public String getGidId() {
return gidId;
}
public String getNumber() {
return number;
}
public void setName(String name) {
this.name = name;
}
public void setType(String type) {
this.type = type;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public void setGender(String gender) {
this.gender = gender;
}
public void setEmail(String email) {
this.email = email;
}
public void setGidId(String gidId) {
this.gidId = gidId;
}
public void setNumber(String number) {
this.number = number;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
我们新建一个service 接口
public interface StudentService {
//登录
@POST("user/auth")
Call<StudentBean> login(@Query("username") String username,
@Query("password") String password);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
@POST和@GET分别是请求方式的注解
@POST(“user/auth”)其中的login和一个baseURL组成接口
username和password分别就是接口需要的参数
然后创建一个Retrofit类
public class RetrofitStudent {
private Retrofit retrofit;
private StudentService service;
public StudentService getService(){
//这里的MyAPI.BaseURL是指服务器端的基本url
//加上之前 @POST()里的地址 组成完整的接口url
retrofit=new Retrofit.Builder()
.baseUrl(MyAPI.baseURL)
.addConverterFactory(GsonConverterFactory.create())
.build();//增加返回值为实体类的支持
//创建service
return retrofit.create(StudentService.class);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
下面就可以在loginActivity里面写发送请求的代码了
在LoginActivity中的attemptLogin的最后 将对UserLoginTask的调用 改成以下代码,原因是task是一个异步的调用,这里使用retrofit也是异步的调用,将这部分写在task里会造成问题,所以这里就不用task来写了,直接将对它的调用去掉。
在Activity里添加变量
private Call<StudentBean> callback;
private StudentBean studentBean;
private StudentService service;
- 1
- 2
- 3
service=new RetrofitStudent().getService();
callback = service.login(email, password);
callback.enqueue(new Callback<StudentBean>() {
@Override
public void onResponse(Call<StudentBean> call, Response<StudentBean> response) {
Log.i("isSuccess","true");
studentBean = response.body();
showProgress(false);
finish();
}
@Override
public void onFailure (Call < StudentBean > call, Throwable t){
showProgress(false);
mPasswordView.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
然后我们运行LoginActivity就能向服务器端发送请求了!完成!