[lottery] 06_用户登录

Android 4.0

用户登录

技术点:1、监听EditText的文本变化事件
etUserName.addTextChangedListener(new MyTextWatcher());
2、自定义组合控件-用户登录
<!-- 用户名-组合控件 -->
<LinearLayout
    android:layout_width="180dip"
    android:layout_height="wrap_content"
    android:layout_marginLeft="15dip"
    android:background="@android:drawable/edit_text" >
    <EditText
        android:id="@+id/et_user_login_username"
        android:layout_width="140dip"
        android:layout_height="wrap_content"
        android:background="@null"
        android:inputType="number"
        android:singleLine="true"
        android:text="13200000000" />
    <ImageView
        android:id="@+id/iv_clear_username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginLeft="4dip"
        android:src="@drawable/id_clear_button"
        android:visibility="invisible" />
</LinearLayout>


步骤:
l第一步:加载layout、初始化、设置监听
l第二步:用户输入信息校验
l第三步:子线程中调用对应业务层类实现登陆
l第四步:获取用户余额
l第五步:自动登陆处理  关于密码的保存问题
l第六步:界面的跳转
l
核心代码:
package cn.zengfansheng.lottery.view;
 
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import cn.zengfansheng.lottery.ConstantValue;
import cn.zengfansheng.lottery.GlobalParams;
import cn.zengfansheng.lottery.R;
import cn.zengfansheng.lottery.domain.User;
import cn.zengfansheng.lottery.engine.UserEngine;
import cn.zengfansheng.lottery.factory.EngineFactory;
import cn.zengfansheng.lottery.net.protocol.Message;
import cn.zengfansheng.lottery.util.LogUtil;
import cn.zengfansheng.lottery.util.PromptManager;
import cn.zengfansheng.lottery.view.manager.UIManager;
 
/**
* 用户登录界面
*
* @author hacket
*/

public class UserLogin extends BaseView {
 
    private static final String TAG = "UserLogin";
 
    public UserLogin(Context context, Bundle bundle) {
        super(context, bundle);
        this.bundle = bundle;
    }
 
    public UserLogin(Context context) {
        super(context);
    }
 
    @Override
    protected void init() {
        showView = (ViewGroup) View.inflate(context, R.layout.zl_user_login, null);
 
        // 初始化组件
        initComponent();
 
    }
 
    @Override
    protected void setListener() {
        // 用户登录组件监听事件
        setComponentListener();
    }
 
    @Override
    public int getViewId() {
        return ConstantValue.VIEW_USERLOGIN;
    }
 
    // note*********************0、用户登录所要做的操作*********************
    // 第一步:加载layout、初始化、设置监听
    // 第二步:用户输入信息校验
    // 第三步:子线程中调用对应业务层类实现登陆
    // 第四步:获取用户余额
    // 第五步:自动登陆处理
    // 关于密码的保存问题
    // 第六步:界面的跳转
 
    // note*********************1、初始化,设置监听*********************
    private EditText etUserName;// 用户登录名
    private ImageView ivClearUsername;// 清理用户名
    private EditText etPassword;// 用户登录名
    private CheckBox cbAutoLogin;// 自动登录
    private Button btnRegister;// 注册
    private Button btnLogin;// 登录
 
    /**
     * 初始化组件
     */

    public void initComponent() {
        // 用户名
        etUserName = (EditText) findViewById(R.id.et_user_login_username);
        // 清除用户名
        ivClearUsername = (ImageView) findViewById(R.id.iv_clear_username);
        // 密码
        etPassword = (EditText) findViewById(R.id.et_user_login_password);
 
        // 自动登录
        cbAutoLogin = (CheckBox) findViewById(R.id.cb_user_login_auto_login);
 
        // 注册
        btnRegister = (Button) findViewById(R.id.btn_user_login_regist);
        // 登录
        btnLogin = (Button) findViewById(R.id.btn_user_login);
    }
 
    /**
     * 设置监听
     */

    public void setComponentListener() {
        ivClearUsername.setOnClickListener(this);
        btnRegister.setOnClickListener(this);
        btnLogin.setOnClickListener(this);
 
        etUserName.addTextChangedListener(new MyTextWatcher());
    }
 
    @Override
    public void onClick(View v) {
        super.onClick(v);
        switch (v.getId()) {
        case R.id.iv_clear_username:// 清理用户名
            clearUsername();
            break;
        case R.id.btn_user_login_regist:// 注册
            // 和用户登录实现一致
            break;
        case R.id.btn_user_login:// 登录
            LogUtil.i(TAG, "用户点击了登录~");
            userLogin();
            break;
        default:
            break;
        }
    }
 
    /**
     * 文本内容改变事件
     *
     * @author hacket
     */

    private class MyTextWatcher implements TextWatcher{
 
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }
 
        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
        }
 
        @Override
        public void afterTextChanged(Editable s) {
            // 文本内容一变化就设置清理用户名图片可见
            LogUtil.i(TAG, "用户名输入变化了");
            ivClearUsername.setVisibility(View.VISIBLE);
        }
    }
 
    // note*********************2、用户输入信息校验*********************
    /**
     * 校验用户名和密码的输入
     *
     * @param username
     *            用户名
     * @param password
     *            密码
     * @return 输入合法返回true,否则返回false
     */

    public boolean checkUserAndPass(String username, String password) {
 
        if (TextUtils.isEmpty(username)) {
            PromptManager.showToast(context, "用户名不能为空");
            return false;
        } else if (TextUtils.isEmpty(password)) {
            PromptManager.showToast(context, "密码不能为空");
            return false;
        }
        return true;
    }
 
    // note*********************2-1、清理用户名的输入*********************
    /**
     * 清理用户名的输入
     */

    private void clearUsername() {
        String username = etUserName.getText().toString().trim();
        if (!TextUtils.isEmpty(username)) {
            etUserName.setText("");
            ivClearUsername.setVisibility(View.GONE);
        }
    }
 
    // note*********************3、子线程中调用对应业务层类实现登陆*********************
    /**
     * 用户登录
     */

    private void userLogin(){
        String username = etUserName.getText().toString().trim();
        String password = etPassword.getText().toString().trim();
        boolean isLegal = checkUserAndPass(username, password);
        if (isLegal) {// 输入合法
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            new MyHttpAsyncTask<User>() {
 
                @Override
                protected void onPreExecute() {
                    super.onPreExecute();
                    // PromptManager.showProgressDialog(context);
                }
 
                @Override
                protected Message doInBackground(User... user) {
                    // SystemClock.sleep(500);
                    // 后台进行登录
                    User myUser = user[0];
                    UserEngine userEngine = EngineFactory.getEngineImplInstance(UserEngine.class);
                    return userEngine.login(myUser);
                }
 
                @Override
                protected void onPostExecute(Message result) {
                    super.onPostExecute(result);
                    // PromptManager.closeProgressDialog();
                    if (result!=null) {
                        int errorcode = result.getBody().getOlement().getErrorcode();
                        if (0 == errorcode) {// 服务器返回成功
                            GlobalParams.isLogin = true;// 标记用户登录状态为登录
                            UIManager.getUiManager().history();
                            PromptManager.showToast(context, "登录成功");
                        }else{
                            GlobalParams.isLogin = false;
                            UIManager.getUiManager().history();
                            String errormsg = result.getBody().getOlement().getErrormsg();
                            PromptManager
                                    .showToast(context, "登录失败:" + errormsg);
                        }
                    }
                }
            }.executeProxy(user);
        }
    }
}
效果: