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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值