GuideMap 登录界面 详细文档(三)

六、LoginActivity 登录类

1、获取已经保存好的用户密码
    private void getSavedUsers()

2、初始化
    private void initView()

3、点击事件
    @Override public void onClick(View v)

4、退出此Activity时保存users 
    @Override public void onPause()

5、账户名下拉框相关
    弹出窗口初始化
        public void initPop()
    内部类,账户名下拉框的listView的适配器
        class MyAapter extends ArrayAdapter<User>
    PopupWindow对象dismiss时的事件
        public void onDismiss()
    点击listView
        public void onItemClick()

6、监听editText编辑框的变化
    private void setListener()

7、显示载入中界面
    private void showLoginingDlg()
    private void closeLoginingDlg()
    private void initLoginingDlg()
/**
 * 登陆界面
 */
public class LoginActivity extends AppCompatActivity implements View.OnClickListener,
        AdapterView.OnItemClickListener , PopupWindow.OnDismissListener{

    protected static final String TAG = "LoginActivity";
    private Button mLoginButton;
    private TextView mErrorLoginButton;
    private TextView mRegisterButton;
    private EditText mUserAccountEdit;   //用户名编辑框
    private EditText mUserpasswordEdit;  //密码编辑框

    private Toolbar toolbar;

    private LinearLayout mLoginLinearLayout; // 登录内容的容器
    private LinearLayout mUserAccountLinearLayout; // 将下拉弹出窗口在此容器下方显示
    private Animation mTranslate; // 位移动画
    private Dialog mLoginingDlg; // 显示正在登录的Dialog
    private ImageView mMoreUser; // 下拉图标
    private ImageView mLoginMoreUserView; // 弹出下拉弹出窗的按钮
    private String mAccount;
    private String mPassword;
    private ArrayList<User> mUsers; // 用户列表
    private ListView mUserAccountListView; // 下拉弹出窗显示的ListView对象
    private PopupWindow mPop; // 下拉弹出窗
    private MyAapter mAdapter; // ListView的监听器


   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        initView();
        getSavedUsers();
        setListener();
        mLoginLinearLayout.startAnimation(mTranslate); // Y轴水平移动


    }


    private void getSavedUsers(){
        /*  获取已经保存好的用户密码 */
        mUsers= UserLoginSave.getUserList(LoginActivity.this);

        if (mUsers.size()>0){
            /* 将列表中的第一个user显示在编辑框 */
            mUserAccountEdit.setText(mUsers.get(0).GetAccount());
            mAccount=mUsers.get(0).GetAccount();
            mUserpasswordEdit.setText(mUsers.get(0).GetPassword());
            mPassword=mUsers.get(0).GetPassword();
        }

        LinearLayout parent = (LinearLayout) getLayoutInflater().inflate(
                R.layout.userifo_listview, null);
        mUserAccountListView = (ListView) parent.findViewById(android.R.id.list);
        parent.removeView(mUserAccountListView); // 必须脱离父子关系,不然会报错
        mUserAccountListView.setOnItemClickListener(this); // 设置点击事件
        mAdapter = new MyAapter(mUsers);
        mUserAccountListView.setAdapter(mAdapter);
    }

    private void initView(){


        mUserAccountEdit=(EditText)findViewById(R.id.login_edtAccount);
        mUserpasswordEdit=(EditText)findViewById(R.id.login_edtPwd);

        mLoginButton=(Button)findViewById(R.id.login_btn);
        mLoginButton.setOnClickListener(this);

        mErrorLoginButton=(TextView)findViewById(R.id.loginerror_tv);
        mErrorLoginButton.setOnClickListener(this);

        mRegisterButton=(TextView)findViewById(R.id.register_tv);
        mRegisterButton.setOnClickListener(this);



        mMoreUser = (ImageView) findViewById(R.id.login_more_user);
        mLoginButton = (Button) findViewById(R.id.login_btn);
        mLoginMoreUserView = (ImageView) findViewById(R.id.login_more_user);
        mLoginLinearLayout = (LinearLayout) findViewById(R.id.login_linearLayout);
        mUserAccountLinearLayout = (LinearLayout) findViewById(R.id.userAccount_LinearLayout);
        mTranslate = AnimationUtils.loadAnimation(this, R.anim.my_translate); // 初始化动画对象

        initLoginingDlg();
    }




    @Override
    public void onClick(View v) {
        int id=v.getId();
        switch (id){
            case R.id.login_btn:
               Toast.makeText(this, "login", Toast.LENGTH_LONG).show();
                showLoginingDlg();//显示"正在登录"对话框
                Log.i(TAG, mAccount + "  " + mPassword);
                if (mAccount == null || mAccount.equals("")) {
                // 账号为空时
                    Toast.makeText(LoginActivity.this, "请输入账号", Toast.LENGTH_SHORT)
                            .show();
                } else if (mPassword == null || mPassword.equals("")) {
                // 密码为空时
                    Toast.makeText(LoginActivity.this, "请输入密码", Toast.LENGTH_SHORT)
                            .show();
                } else {
                // 账号和密码都不为空时
                    boolean mIsSave = true;
                    try {
                        Log.i(TAG, "保存用户列表");
                        for (User user : mUsers) { // 判断本地文档是否有此ID用户
                            if (user.GetAccount().equals(mAccount)) {
                                mIsSave = false;
                                Toast.makeText(LoginActivity.this, "本地有此ID", Toast.LENGTH_SHORT)
                                        .show();
                                break;
                            }
                        }
                        if (mIsSave) { // 将新用户加入users
                            Toast.makeText(LoginActivity.this, "保存ID", Toast.LENGTH_SHORT)
                                    .show();
                            User user = new User(mAccount, mPassword);
                            mUsers.add(user);

                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    /**
                     * 检查用户账户是否存在,返回0则存在
                     *
                     */
                    VolleyIO.JsonGet(Constant.Url_isAccountExist + "account=" + mAccount, new VolleyInterface(LoginActivity.this, VolleyInterface.mListener, VolleyInterface.mErrorListener) {
                        @Override
                        public void onMySuccess(JSONObject result) {
                            Log.i(TAG, Constant.Url_isAccountExist + "account=" + mAccount);
                            if (result.optString("errorName").equals("0")) {

                                /**
                                 * 进行登录操作,返回0则登陆成功
                                 */
                                VolleyIO.JsonGet(Constant.LoginUrl + "account=" + mAccount + "&" + "password=" + mPassword, new VolleyInterface(LoginActivity.this, VolleyInterface.mListener, VolleyInterface.mErrorListener) {
                                    @Override
                                    public void onMySuccess(JSONObject result) {
                                        Log.i(TAG, result.toString());
                                        if (result.optString("errorName").equals("0")) {
                                            Toast.makeText(LoginActivity.this, "登陆成功1", Toast.LENGTH_SHORT).show();
                                            /**
                                             * 获取用户信息
                                             */
                                            VolleyIO.JsonGet(Constant.Url_getinfo + "account=" + mAccount, new VolleyInterface(LoginActivity.this, VolleyInterface.mListener, VolleyInterface.mErrorListener) {
                                                @Override
                                                public void onMySuccess(JSONObject result) {
                                                    Toast.makeText(LoginActivity.this, "登陆成功2", Toast.LENGTH_SHORT).show();
                                                    Gson gson = new Gson();
                                                    User user = gson.fromJson(result.toString(), User.class);

                                                    LoginUser.account = user.GetAccount();
                                                    LoginUser.password = user.GetPassword();
                                                    LoginUser.name = user.GetName();
                                                    LoginUser.phone = user.GetPhone();
                                                    LoginUser.mail = user.GetMail();

                                                    closeLoginingDlg();// 关闭对话框

                                                    try {
                                                        UserLoginSave.saveUserList(LoginActivity.this, mUsers);
                                                    } catch (Exception e) {
                                                        e.printStackTrace();
                                                    }
                                                    finish();
                                                }

                                                @Override
                                                public void onMyError(VolleyError error) {

                                                }
                                            });
                                        } else {
                                            Toast.makeText(LoginActivity.this, "密码错误", Toast.LENGTH_SHORT).show();
                                        }
                                    }

                                    @Override
                                    public void onMyError(VolleyError error) {
                                        Log.i(TAG, "onMyError");
                                    }
                                });
                            } else {
                                Toast.makeText(LoginActivity.this, "用户名不存在", Toast.LENGTH_SHORT).show();
                            }
                        }

                        @Override
                        public void onMyError(VolleyError error) {
                            Toast.makeText(LoginActivity.this, "登录失败", Toast.LENGTH_LONG).show();
                            Log.i(TAG, Constant.Url_isAccountExist + "account=" + mAccount);
                        }
                    });

                }

                break;
            case R.id.loginerror_tv:
                Toast.makeText(this, "login error", Toast.LENGTH_LONG).show();
                /**
                 *
                 * 测试
                 */

                VolleyIO.JsonGet(Constant.TestUrl, new VolleyInterface(LoginActivity.this, VolleyInterface.mListener, VolleyInterface.mErrorListener) {
                    @Override
                    public void onMySuccess(JSONObject result) {

                        Gson gson = new Gson();
                        Test test = gson.fromJson(result.toString(), Test.class);
                        LoginUser.name=test.getCity();




                    }

                    @Override
                    public void onMyError(VolleyError error) {

                    }
                });
                break;
            case R.id.register_tv:
                Intent intent=new Intent();
                intent.setClass(this, RegisterActivity.class);
                startActivity(intent);
                Toast.makeText(this, "register", Toast.LENGTH_LONG).show();
                break;

            case R.id.login_more_user: // 当点击下拉栏
                Log.i(TAG, "当点击下拉栏");

                if (mPop == null) {
                    initPop();
                }
                if (!mPop.isShowing() && mUsers.size() > 0) {
                     Log.i(TAG, "切换为角向上图标");
                    mMoreUser.setImageResource(R.drawable.login_more_up); // 切换图标
                    mPop.showAsDropDown(mUserAccountLinearLayout, 2, 1); // 显示弹出窗口
                }
                break;


        }

    }
    /* 退出此Activity时保存users */
    @Override
    public void onPause() {
        super.onPause();
        try {
            UserLoginSave.saveUserList(LoginActivity.this,mUsers);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     *  PopupWindow对象dismiss时的事件 */
    @Override
    public void onDismiss() {
        mMoreUser.setImageResource(R.drawable.login_more_up);
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        mUserAccountEdit.setText(mUsers.get(position).GetAccount());
        mUserpasswordEdit.setText(mUsers.get(position).GetPassword());
        mPop.dismiss();
    }

    /**
     *  ListView的适配器
     *  */
    class MyAapter extends ArrayAdapter<User> {

        public MyAapter(ArrayList<User> users) {
            super(LoginActivity.this, 0, users);
        }

        public View getView(final int position, View convertView,
                            ViewGroup parent) {
            if (convertView == null) {
                convertView = getLayoutInflater().inflate(
                        R.layout.login_listview_item, null);
            }

            TextView userIdText = (TextView) convertView
                    .findViewById(R.id.listview_userAccount);
            userIdText.setText(getItem(position).GetAccount());

            ImageView deleteUser = (ImageView) convertView
                    .findViewById(R.id.login_delete_user);
            deleteUser.setOnClickListener(new View.OnClickListener() {
                // 点击删除deleteUser时,在mUsers中删除选中的元素
                @Override
                public void onClick(View v) {

                    if (getItem(position).GetAccount().equals(mAccount)) {
                        // 如果要删除的用户Id和Id编辑框当前值相等,则清空
                        mAccount = "";
                        mPassword = "";
                        mUserAccountEdit.setText(mAccount);
                        mUserpasswordEdit.setText(mPassword);
                    }
                    mUsers.remove(getItem(position));
                    mAdapter.notifyDataSetChanged(); // 更新ListView
                }
            });
            return convertView;
        }

    }

    /**
     *  监听EditText的变化
     */
    private void setListener() {
        mUserAccountEdit.addTextChangedListener(new TextWatcher() {

            //变化中
            public void onTextChanged(CharSequence s, int start, int before,
                                      int count) {
                mAccount = s.toString();
            }
            //变化前
            public void beforeTextChanged(CharSequence s, int start, int count,
                                          int after) {
            }
            //变化后
            public void afterTextChanged(Editable s) {
            }
        });
        mUserpasswordEdit.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence s, int start, int before,
                                      int count) {
                mPassword = s.toString();
            }

            public void beforeTextChanged(CharSequence s, int start, int count,
                                          int after) {
            }

            public void afterTextChanged(Editable s) {
            }
        });

        mLoginButton.setOnClickListener(this);
        mLoginMoreUserView.setOnClickListener(this);
    }

    /**
     *  显示正在登录对话框 */
    private void showLoginingDlg() {
        if (mLoginingDlg != null)
            mLoginingDlg.show();
    }

    /**
     *  关闭正在登录对话框 */
    private void closeLoginingDlg() {
        if (mLoginingDlg != null && mLoginingDlg.isShowing())
            mLoginingDlg.dismiss();
    }

    /**
     * 弹出窗口
     */
    public void initPop() {
        int width = mUserAccountLinearLayout.getWidth() - 4;
        int height = LinearLayout.LayoutParams.WRAP_CONTENT;
        mPop = new PopupWindow(mUserAccountListView, width, height, true);
        mPop.setOnDismissListener(this);// 设置弹出窗口消失时监听器

        // 注意要加这句代码,点击弹出窗口其它区域才会让窗口消失
        mPop.setBackgroundDrawable(new ColorDrawable(0xffffffff));

    }


    /**
     *
     *
     * 初始化正在登录对话框
     *
     * */
    private void initLoginingDlg() {

        mLoginingDlg = new Dialog(this, R.style.loginingDlg);
        mLoginingDlg.setContentView(R.layout.logining_dlg);

        Window window = mLoginingDlg.getWindow();
        WindowManager.LayoutParams params = window.getAttributes();
        // 获取和mmLoginingDlg关联的当前窗口的属性,从而设置它在屏幕中显示的位置

        // 获取屏幕的高宽
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        int cxScreen = dm.widthPixels;
        int cyScreen = dm.heightPixels;

        int height = (int) getResources().getDimension(
                R.dimen.loginingdlg_height);// 高42dp
        int lrMargin = (int) getResources().getDimension(
                R.dimen.loginingdlg_lr_margin); // 左右边沿10dp
        int topMargin = (int) getResources().getDimension(
                R.dimen.loginingdlg_top_margin); // 上沿20dp

        params.y = (-(cyScreen - height) / 2) + topMargin; // -199
        /* 对话框默认位置在屏幕中心,所以x,y表示此控件到"屏幕中心"的偏移量 */

        params.width = cxScreen;
        params.height = height;
        // width,height表示mLoginingDlg的实际大小

        mLoginingDlg.setCanceledOnTouchOutside(true); // 设置点击Dialog外部任意区域关闭Dialog
    }




}

UI界面

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/login3">
    <RelativeLayout
        android:id="@+id/login_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:gravity="center" >
        <LinearLayout
            android:id="@+id/login_linearLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="80dp"
            android:orientation="vertical"
            >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/white"
            android:orientation="vertical"
            >

            <LinearLayout
                android:id="@+id/userAccount_LinearLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="right"
                android:orientation="horizontal" >

                <!-- android:ems="10"表示EditText内最多只显示10个字符,超出不显示 -->
                <!-- android:singleLine="true"表示不能全部显示时,后面用“…”来表示 -->
                <!-- android:background="@null"不显示默认编辑框背景 -->
                <EditText
                    android:id="@+id/login_edtAccount"
                    android:layout_width="0dp"
                    android:layout_height="44dp"
                    android:layout_weight="1"
                    android:background="@null"
                    android:ems="10"
                    android:hint="@string/idtxthint"
                    android:paddingLeft="15dp"
                    android:paddingRight="15dp"
                    android:singleLine="true"
                    android:textColorHint="#999999"
                    android:textSize="18sp"
                    android:textColor="@color/black">

                    <requestFocus />
                </EditText>

                <ImageView
                    android:id="@+id/login_more_user"
                    android:layout_width="wrap_content"
                    android:layout_height="44dp"
                    android:layout_marginRight="15dp"
                    android:layout_marginTop="5dp"
                    android:src="@drawable/login_more_up" />
            </LinearLayout>

            <!-- 横线  -->
            <View
                android:layout_width="match_parent"
                android:layout_height="2dp"
                android:background="#CACDD1" />

            <EditText
                android:id="@+id/login_edtPwd"
                android:layout_width="match_parent"
                android:layout_height="44dp"
                android:background="@null"
                android:hint="@string/pwdtxthint"
                android:inputType="textPassword"
                android:paddingLeft="15dp"
                android:paddingRight="0dp"
                android:singleLine="true"
                android:textColorHint="#999999"
                android:textColor="@color/black"/>
            <!-- 提示信息的颜色  -->
                android:textSize="18sp" />
        </LinearLayout>

            <Button
                android:id="@+id/login_btn"
                android:layout_width="fill_parent"
                android:layout_height="40dp"
                android:layout_marginTop="30dp"
                android:background="#ff336699"
                android:textColor="@android:color/white"
                android:gravity="center"
                android:text="登录" />
        </LinearLayout>


        <TextView
            android:id="@+id/register_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="注册"
            android:textSize="24sp"
            android:textColor="@color/white"
            android:layout_below="@id/login_linearLayout"
            android:layout_marginTop="30dp"
            android:layout_alignLeft="@id/login_linearLayout"/>
        <TextView
            android:id="@+id/loginerror_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="忘记密码"
            android:textSize="24sp"
            android:textColor="@color/white"
            android:layout_below="@id/login_linearLayout"
            android:layout_marginTop="30dp"
            android:layout_alignRight="@id/login_linearLayout"/>

    </RelativeLayout>




</RelativeLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值