登陆网络请求的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就能向服务器端发送请求了!完成!

猜你喜欢

转载自blog.csdn.net/tiancaijunm/article/details/72783972