登陸網路請求的Retrofit實現【新手】
阿新 • • 發佈:2018-11-23
介紹: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'
新建一個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>
首先寫一個封裝登陸資訊的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;
}
我們新建一個service 介面
public interface StudentService {
//登入
@POST("user/auth")
Call<StudentBean> login(@Query("username") String username,
@Query("password") String password);
}
}
@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);
}
}
下面就可以在loginActivity裡面寫傳送請求的程式碼了
在LoginActivity中的attemptLogin的最後 將對UserLoginTask的呼叫 改成以下程式碼,原因是task是一個非同步的呼叫,這裡使用retrofit也是非同步的呼叫,將這部分寫在task裡會造成問題,所以這裡就不用task來寫了,直接將對它的呼叫去掉。
在Activity裡新增變數
private Call<StudentBean> callback;
private StudentBean studentBean;
private StudentService service;
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();
}
});
然後我們執行LoginActivity就能向伺服器端傳送請求了!完成!