Android - 原生登錄註冊頁面【仿】淘寶App

這裏寫圖片描述這裏寫圖片描述

bean文件夾:解析數據

LoginBean.java

private String msg;
    private String code;
    private DataBean data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class DataBean {
    private Object age;
        private String appkey;
        private String appsecret;
        private String createtime;
        private Object email;
        private Object fans;
        private Object follow;
        private Object gender;
        private Object icon;
        private Object latitude;
        private Object longitude;
        private String mobile;
        private Object money;
        private String nickname;
        private String password;
        private Object praiseNum;
        private String token;
        private int uid;
        private Object userId;
        private String username;

        public Object getAge() {
            return age;
        }

        public void setAge(Object age) {
            this.age = age;
        }

        public String getAppkey() {
            return appkey;
        }

        public void setAppkey(String appkey) {
            this.appkey = appkey;
        }

        public String getAppsecret() {
            return appsecret;
        }

        public void setAppsecret(String appsecret) {
            this.appsecret = appsecret;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public Object getEmail() {
            return email;
        }

        public void setEmail(Object email) {
            this.email = email;
        }

        public Object getFans() {
            return fans;
        }

        public void setFans(Object fans) {
            this.fans = fans;
        }

        public Object getFollow() {
            return follow;
        }

        public void setFollow(Object follow) {
            this.follow = follow;
        }

        public Object getGender() {
            return gender;
        }

        public void setGender(Object gender) {
            this.gender = gender;
        }

        public Object getIcon() {
            return icon;
        }

        public void setIcon(Object icon) {
            this.icon = icon;
        }

        public Object getLatitude() {
            return latitude;
        }

        public void setLatitude(Object latitude) {
            this.latitude = latitude;
        }

        public Object getLongitude() {
            return longitude;
        }

        public void setLongitude(Object longitude) {
            this.longitude = longitude;
        }

        public String getMobile() {
            return mobile;
        }

        public void setMobile(String mobile) {
            this.mobile = mobile;
        }

        public Object getMoney() {
            return money;
        }

        public void setMoney(Object money) {
            this.money = money;
        }

        public String getNickname() {
            return nickname;
        }

        public void setNickname(String nickname) {
            this.nickname = nickname;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public Object getPraiseNum() {
            return praiseNum;
        }

        public void setPraiseNum(Object praiseNum) {
            this.praiseNum = praiseNum;
        }

        public String getToken() {
            return token;
        }

        public void setToken(String token) {
            this.token = token;
        }

        public int getUid() {
            return uid;
        }

        public void setUid(int uid) {
            this.uid = uid;
        }

        public Object getUserId() {
            return userId;
        }

        public void setUserId(Object userId) {
            this.userId = userId;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }
    }
}

RegisBean.java

public class RegisBean {
    private String msg;
    private String code;
    private String data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

圖片文件

這裏寫圖片描述

xml文件

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp">

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:src="@drawable/taobao_img" />

    <EditText
        android:id="@+id/ed_user"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="手機號/會員號/郵箱" />

    <EditText
        android:id="@+id/ed_pass"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入密碼" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/login"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="#fc7802"
            android:text="登錄"
            android:textColor="#fff" />

        <Button
            android:id="@+id/regis"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="#fc7802"
            android:text="註冊"
            android:textColor="#fff" />
    </LinearLayout>
</LinearLayout>

activity_regis.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp">

    <EditText
        android:id="@+id/ed_user"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="手機號/會員號/郵箱" />

    <EditText
        android:id="@+id/ed_pass"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入密碼" />

    <Button
        android:id="@+id/regis"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="註冊" />
</LinearLayout>

主頁面

public class MainActivity extends AppCompatActivity implements IView {

    @BindView(R.id.ed_user)
    EditText edUser;
    @BindView(R.id.ed_pass)
    EditText edPass;
    @BindView(R.id.login)
    Button login;
    @BindView(R.id.regis)
    Button regis;
    private LoginPresenter loginPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }

    @OnClick({R.id.login, R.id.regis})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.login:
                loginPresenter = new LoginPresenter(this);
                Map<String, String> map = new HashMap<>();
                map.put("mobile", edUser.getText().toString().trim());
                map.put("password", edPass.getText().toString().trim());
                loginPresenter.get("http://120.27.23.105/", map);
                break;
            case R.id.regis:
                startActivity(new Intent(this, RegisActivity.class));
                break;
        }
    }

    @Override
    public void onSuccess(Object o) {
        LoginBean b = (LoginBean) o;
        if (b.getMsg() != null) {
            Toast.makeText(this, b.getMsg(), Toast.LENGTH_SHORT).show();
        }
        if (b.getCode().equals("0")) {
            // 跳轉列表信息
            startActivity(new Intent(this, DetailsActivity.class));
        }
    }

    @Override
    public void onFailed(Exception e) {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (loginPresenter != null) {
            loginPresenter.detatch();
        }
    }
}

model文件夾:數據層

IModel.java

public interface IModel {
    void get(String baseurl, Map<String, String> map);
}

LoginModel.java

public class LoginModel implements IModel {
    private LoginPresenter presenter;

    public LoginModel(LoginPresenter presenter) {
        this.presenter = presenter;
    }

    @Override
    public void get(String baseurl, Map<String, String> map) {
        Flowable<LoginBean> flowable = RetrofitUtils.getInstance(baseurl).getretrofit().create(ApiService.class).loginget(map);
        presenter.getData(flowable);
    }

RegisModel.java

public class RegisModel implements IModel {
    private RegisPresenter presenter;

    public RegisModel(RegisPresenter presenter) {
        this.presenter = presenter;
    }

    @Override
    public void get(String baseurl, Map<String, String> map) {
        Flowable<RegisBean> flowable = RetrofitUtils.getInstance(baseurl).getretrofit().create(ApiService.class).regisget(map);
        presenter.getData(flowable);
    }
}

view文件夾:視圖層

IView.java

public interface IView {
    void onSuccess(Object o);

    void onFailed(Exception e);
}

RegisActivity.java

public class RegisActivity extends AppCompatActivity implements IView {

    @BindView(R.id.ed_user)
    EditText edUser;
    @BindView(R.id.ed_pass)
    EditText edPass;
    @BindView(R.id.regis)
    Button regis;
    private RegisPresenter regisPresenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_regis);
        ButterKnife.bind(this);

    }

    @OnClick(R.id.regis)
    public void onViewClicked() {
        regisPresenter = new RegisPresenter(this);
        Map<String, String> map = new HashMap<>();
        map.put("mobile", edUser.getText().toString().trim());
        map.put("password", edPass.getText().toString().trim());
        regisPresenter.get("http://120.27.23.105/", map);
    }

    @Override
    public void onSuccess(Object o) {
        RegisBean b = (RegisBean) o;
        Toast.makeText(this, b.getMsg(), Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onFailed(Exception e) {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (regisPresenter != null) {
            regisPresenter.detatch();
        }
    }

persenter文件夾:邏輯層

BasePresenter.java

public interface BasePresenter {
    void get(String baseurl, Map<String, String> map);

    void get2(String baseurl, Map<String, String> map);
}

LoginPresenter.java

public class LoginPresenter implements BasePresenter {
    private IView iv;
    private DisposableSubscriber<LoginBean> disposableSubscriber;

    public LoginPresenter(IView iv) {
        this.iv = iv;
    }

    @Override
    public void get(String baseurl, Map<String, String> map) {
        LoginModel model = new LoginModel(this);
        model.get(baseurl, map);
    }

    @Override
    public void get2(String baseurl, Map<String, String> map) {

    }

    public void getData(Flowable<LoginBean> flowable) {
        disposableSubscriber = flowable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableSubscriber<LoginBean>() {
                    @Override
                    public void onNext(LoginBean loginBean) {
                        iv.onSuccess(loginBean);
                    }

                    @Override
                    public void onError(Throwable t) {
                        iv.onFailed((Exception) t);
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    //防止內存泄漏
    public void detatch() {
        if (iv != null) {
            iv = null;
        }
        if (disposableSubscriber != null) {
            if (!disposableSubscriber.isDisposed()) {
                disposableSubscriber.dispose();
            }
        }
    }
}

RegisPresenter.java

public class RegisPresenter implements BasePresenter {
    private IView iv;
    private DisposableSubscriber<LoginBean> disposableSubscriber;

    public RegisPresenter(IView iv) {
        this.iv = iv;
    }

    @Override
    public void get(String baseurl, Map<String, String> map) {
        RegisModel model = new RegisModel(this);
        model.get(baseurl, map);
    }

    @Override
    public void get2(String baseurl, Map<String, String> map) {

    }

    public void getData(Flowable<RegisBean> flowable) {
        flowable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableSubscriber<RegisBean>() {
                    @Override
                    public void onNext(RegisBean regisBean) {
                        iv.onSuccess(regisBean);
                    }

                    @Override
                    public void onError(Throwable t) {
                        iv.onFailed((Exception) t);
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    //防止內存泄漏
    public void detatch() {
        if (iv != null) {
            iv = null;
        }
        if (disposableSubscriber != null) {
            if (!disposableSubscriber.isDisposed()) {
                disposableSubscriber.dispose();
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章