MVP框架的登陆注册

本文详细介绍了登录页面的布局设计,包括使用LinearLayout进行垂直排列,EditText用于输入手机号和密码,ProgressBar显示加载状态,以及TextView作为登录按钮。同时,提供了LoginActivity的实现代码,展示了如何通过findViewById初始化视图组件,设置监听器响应登录操作,并调用LoginPresenter进行登录验证。

//登录页面的布局

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText
        android:id="@+id/etMobile"
        android:gravity="center"
        android:layout_marginTop="@dimen/dimen_30dp"
        android:hint="@string/login_hin"
        android:padding="@dimen/dimen_10dp"
        android:textSize="@dimen/dimen_common_20"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <EditText
        android:id="@+id/etPassword"
        android:hint="请输入密码"
        android:gravity="center"
        android:layout_marginTop="@dimen/dimen_20dp"
        android:padding="@dimen/dimen_10dp"
        android:textSize="@dimen/dimen_common_20"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />



    <ProgressBar
        android:id="@+id/progressBar"
        android:visibility="invisible"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tvLogin"
        android:text="@string/login"
        android:gravity="center"
        android:layout_marginTop="@dimen/dimen_30dp"
        android:padding="@dimen/dimen_10dp"
        android:textSize="@dimen/dimen_common_20"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

//登录页面

public class LoginActivity extends AppCompatActivity implements LoginView {

    private EditText etMobile;
    private EditText etPassword;
    private View tvLogin;
    private ProgressBar progressBar;

private LoginPresenter loginPresenter;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        initView();
        initViewListener();
        loginPresenter=new LoginPresenter(this);
    }

    private void initViewListener() {
        tvLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO: 2018/11/9 点击登录
                String mobile = etMobile.getText().toString().trim();
                String password = etPassword.getText().toString().trim();
                loginPresenter.login(mobile,password);

            }
        });
    }

    private void initView() {
        etMobile = findViewById(R.id.etMobile);
        etPassword = findViewById(R.id.etPassword);
        tvLogin = findViewById(R.id.tvLogin);
        progressBar=findViewById(R.id.progressBar);
    }

    @Override
    public void onSuccess(String result) {
        SharedPreferences sharedPreferences = getSharedPreferences(Constant.APP_CONFIG, Context.MODE_PRIVATE);
        SharedPreferences.Editor edit = sharedPreferences.edit();
        edit.putBoolean(Constant.IS_LOGIN,true);
        edit.commit();
        Intent intent = new Intent(this,MainActivity.class);
        startActivity(intent);
        finish();
    }

    @Override
    public void onFailer(final String erroMsg) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(LoginActivity.this,erroMsg,Toast.LENGTH_SHORT).show();
            }
        });
    }
}

//Login 的 Model层

/**
 * 登录
 */
public class LoginModule {

    public void login(String mobile, String password, final HttpCallBack callBack) {
        // TODO: 2018/11/9 判断数据合法性
//        callBack.onFailer("数据非法");

        final String url = "http://www.zhaoapi.cn/user/login";

        new Thread() {

            @Override
            public void run() {
                super.run();

                try {
                    URL url1 = new URL(url);
                    HttpURLConnection connection = (HttpURLConnection) url1.openConnection();
                    connection.setConnectTimeout(5000);
                    connection.setRequestMethod("GET");
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200) {
                        InputStream inputStream = connection.getInputStream();
                        String s = CharStreams.toString(new InputStreamReader(inputStream, "utf-8"));
                        Gson gson = new Gson();

                        RootBean rootBean = gson.fromJson(s, RootBean.class);

                        if (rootBean.getCode() == 0) {
                            callBack.onSuccess(rootBean.getData());
                        } else {
                            callBack.onFailer(rootBean.getMsg());
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }.start();
        try {
            Thread.sleep(3000);
            if (mobile.equals("chenglong") && password.equals("123456")) {

                callBack.onSuccess("登入成功");
            } else {
                callBack.onFailer("登入失败");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

//网络请求回调

public interface HttpCallBack {

    void onSuccess(String result);
    void onFailer(String erroMsg);
}

Login 的 View层


public interface LoginView {
    void onSuccess(String result);
    void onFailer(String erroMsg);
}

//Login 的 presenter层


public class LoginPresenter {
    private LoginView loginView;
    private LoginModule loginModule;

    public LoginPresenter(LoginView loginView) {
        this.loginView = loginView;
        loginModule = new LoginModule();

    }

    public void login(String mobile, String password) {
        loginModule.login(mobile, password, new HttpCallBack() {
            @Override
            public void onSuccess(String result) {
                
                loginView.onSuccess(result);
            }
            @Override
            public void onFailer(String erroMsg) {
                loginView.onFailer(erroMsg);
            }
        });

    }
}

//Login 的bean类


/**
 * 登录返回
 */
public class LoginResponse implements Serializable {
    private String age;

    private String appkey;

    private String appsecret;

    private String createtime;

    private String email;

    private String fans;

    private String follow;

    private String gender;

    private String icon;

    private String latitude;

    private String longitude;

    private String mobile;

    private String money;

    private String nickname;

    private String password;

    private String praiseNum;

    private String token;

    private int uid;

    private String userId;

    private String username;
}

//注册的Model层


public class RegisterModule {

    public void login(String mobile, String password, final HttpCallBack callBack) {
        // TODO: 2018/11/9 判断数据合法性
//        callBack.onFailer("数据非法");

        final String url = "http://www.zhaoapi.cn/user/login";

        new Thread() {

            @Override
            public void run() {
                super.run();

                try {
                    URL url1 = new URL(url);
                    HttpURLConnection connection = (HttpURLConnection) url1.openConnection();
                    connection.setConnectTimeout(5000);
                    connection.setRequestMethod("GET");
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200) {
                        InputStream inputStream = connection.getInputStream();
                        String s = CharStreams.toString(new InputStreamReader(inputStream, "utf-8"));
                        Gson gson = new Gson();

                        RootBean rootBean = gson.fromJson(s, RootBean.class);

                        if (rootBean.getCode() == 0) {
                            callBack.onSuccess(rootBean.getData());
                        } else {
                            callBack.onFailer(rootBean.getMsg());
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }.start();
        try {
            Thread.sleep(3000);
            if (mobile.equals("chenglong") && password.equals("123456")) {

                callBack.onSuccess(注册入成功");
            } else {
                callBack.onFailer("注册失败");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

//注册的其余页面等同于登录页面

航拍图像多类别实例分割数据集 一、基础信息 • 数据集名称:航拍图像多类别实例分割数据集 • 图片数量: 训练集:1283张图片 验证集:416张图片 总计:1699张航拍图片 • 训练集:1283张图片 • 验证集:416张图片 • 总计:1699张航拍图片 • 分类类别: 桥梁(Bridge) 田径场(GroundTrackField) 港口(Harbor) 直升机(Helicopter) 大型车辆(LargeVehicle) 环岛(Roundabout) 小型车辆(SmallVehicle) 足球场(Soccerballfield) 游泳池(Swimmingpool) 棒球场(baseballdiamond) 篮球场(basketballcourt) 飞机(plane) 船只(ship) 储罐(storagetank) 网球场(tennis_court) • 桥梁(Bridge) • 田径场(GroundTrackField) • 港口(Harbor) • 直升机(Helicopter) • 大型车辆(LargeVehicle) • 环岛(Roundabout) • 小型车辆(SmallVehicle) • 足球场(Soccerballfield) • 游泳池(Swimmingpool) • 棒球场(baseballdiamond) • 篮球场(basketballcourt) • 飞机(plane) • 船只(ship) • 储罐(storagetank) • 网球场(tennis_court) • 标注格式:YOLO格式,包含实例分割的多边形坐标,适用于实例分割任务。 • 数据格式:航拍图像数据。 二、适用场景 • 航拍图像分析系统开发:数据集支持实例分割任务,帮助构建能够自动识别和分割航拍图像中各种物体的AI模型,用于地理信息系统、环境监测等。 • 城市
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值