1. 程式人生 > >登陸網路請求的Retrofit實現【新手】

登陸網路請求的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'

新建一個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就能向伺服器端傳送請求了!完成!