Retrofit+RxJava+Okhttp简单实现登录注册

来源:互联网 发布:mox上位机软件 编辑:程序博客网 时间:2024/05/24 02:38

首先导入依赖:

compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包compile 'com.facebook.fresco:fresco:0.11.0'compile 'io.reactivex.rxjava2:rxjava:2.0.1'compile 'io.reactivex.rxjava2:rxandroid:2.0.1'compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'

1、API

public interface Api {    public static String HOST = "http://120.27.23.105/user/";}

2、ServiceApi

public interface ServiceSApi {    //登录    @GET("{login}")    Flowable<LoginBean> getLogin(@Path("login") String login, @Query("mobile") String mob,@Query("password") String pw);    //注册    @GET("{reg}")    Flowable<RegisterBean> getReg(@Path("reg") String login,@Query("mobile")String mob,@Query("password")String pw);    //个人详情    @GET("{getUserInfo}")    Flowable<UserBean> getUser(@Path("getUserInfo") String login,@Query("uid")String id);}

3、对Retrofit的封装:

public class RetrofitHelper {        private static OkHttpClient client;    private static ServiceSApi serviceAPI;    static {        getClient();    }    public static OkHttpClient getClient(){        if (client==null){            synchronized (OkHttpClient.class){                if (client==null){                    client=new OkHttpClient();                }            }        }return client;    }    public static ServiceSApi getServiceAPI(){        if(serviceAPI==null){            synchronized (ServiceSApi.class){                if(serviceAPI==null){                    serviceAPI=onCreate(ServiceSApi.class,Api.HOST);                }            }        }        return serviceAPI;    }    public static <T> T onCreate(Class<T> tclass,String  url) {        Retrofit build = new Retrofit.Builder()                .baseUrl(url)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                .client(client)                .build();        return build.create(tclass);    }}


4、分别封装3个接口的Bean类

5、主页面  登录  MainActivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    /**     * 请输入手机号     */    private EditText mPhone;    /**     * 请输入密码     */    private EditText mPass;    /**     * 登录     */    private Button mDenglu;    /**     * 注册     */    private Button mRegister;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        mPhone = (EditText) findViewById(R.id.phone1);        mPass = (EditText) findViewById(R.id.pass);        mDenglu = (Button) findViewById(R.id.denglu);        mDenglu.setOnClickListener(this);        mRegister = (Button) findViewById(R.id.register);        mRegister.setOnClickListener(this);    }    @Override    public void onClick(View v) {    switch (v.getId()) {        case R.id.denglu:            String s = mPhone.getText().toString();            String s1 = mPass.getText().toString();            //拿到服务端的登录方法  flowable 被观察者            Flowable<LoginBean> flowable = RetrofitHelper.getServiceAPI().getLogin("login", s, s1);            flowable.observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.io())                //订阅                .subscribe(new Consumer<LoginBean>() {                    @Override                    public void accept(LoginBean loginBean) throws Exception {                        Toast.makeText(MainActivity.this,loginBean.getMsg(),Toast.LENGTH_SHORT).show();                        int uid = loginBean.getData().getUid();                        Intent intent = new Intent(MainActivity.this,SecondActivity.class);                        intent.putExtra("uid",uid+"");                        startActivity(intent);                    }                });            break;        case R.id.register:            break;    }    }}

SecondActivity 注册界面

public class SecondActivity extends AppCompatActivity {    private SimpleDraweeView mSdv;    private TextView mName;    private TextView mKson;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);        initView();        String uid = getIntent().getStringExtra("uid");        Flowable<UserBean> flowable = RetrofitHelper.getServiceAPI().getUser("getUserInfo", uid);        flowable.observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.io())                .subscribe(new Consumer<UserBean>() {                    @Override                    public void accept(UserBean userBean) throws Exception {                        UserBean.DataBean data = userBean.getData();                        String icon = (String) data.getIcon();                        String nickname = (String) data.getNickname();                        String username = data.getUsername();                        if (icon!=null){                            Uri uri = Uri.parse(icon);                            mSdv.setImageURI(uri);                        }                        if (nickname!=null){                            mKson.setText(nickname);                        }else {                            mKson.setText("痴心绝对");                        }                    }                });    }    private void initView() {        mSdv = (SimpleDraweeView) findViewById(R.id.sdv);        mName = (TextView) findViewById(R.id.name);        mKson = (TextView) findViewById(R.id.kson);    }}
ThirdActivity 个人信息

public class ThirdActivity extends AppCompatActivity implements View.OnClickListener {    /**     * 请输入手机号码     */    private EditText mMob1;    /**     * 请输入密码     */    private EditText mPas1;    /**     * 立即注册     */    private Button mZc1;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_third);        initView();    }    private void initView() {        mMob1 = (EditText) findViewById(R.id.phone);        mPas1 = (EditText) findViewById(R.id.pass);        mZc1 = (Button) findViewById(R.id.reg);        mZc1.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.reg:                String s = mMob1.getText().toString();                String s1 = mPas1.getText().toString();                Flowable<RegisterBean> flowable = RetrofitHelper.getServiceAPI().getReg("reg", s, s1);                flowable.observeOn(AndroidSchedulers.mainThread())                        .subscribeOn(Schedulers.io())                        .subscribe(new Consumer<RegisterBean>() {                            @Override                            public void accept(RegisterBean registerBean) throws Exception {                                Toast.makeText(ThirdActivity.this,registerBean.getMsg(),Toast.LENGTH_SHORT).show();;                            }                        });                break;        }    }}

App.

public class App extends Application{    @Override    public void onCreate() {        super.onCreate();        Fresco.initialize(this);    }}


















原创粉丝点击