登陆网络请求的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模版结构清晰。创建完了先放着,一会儿来实现里面登录的网络请求。

登陆网络请求的Retrofit实现「新手」

在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就能向服务器端发送请求了!完成!

相关推荐