利用Android SDK提供的API添加保存历史记录

利用Android SDK提供的现有API写了一个保存账号历史的功能,在这里记录一下方便以后使用。

一、效果图

二、源代码

package com.study.yang.histroyrecorddemo;

import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ListPopupWindow;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private static final String TABLENAME = "user";
    private static final String CREATETABLE = "CREATE TABLE if not exists " + TABLENAME +
            "(_id INTEGER PRIMARY KEY AUTOINCREMENT,code TEXT,account TEXT,pwd TEXT,createdTime" +
            " TimeStamp NOT NULL DEFAULT (datetime('now','localtime')))";


    private EditText etCode;
    private EditText etAccount;
    private EditText etPwd;
    private AlertDialog helpDialog;
    private CheckBox cbChecked;

    private List<HotspotUserBean> hubs = null;
    private ListPopupWindow lpw;
    private AccountAdapter accountAdapter;

    private ColorDrawable dividerDrawable = new ColorDrawable(Color.GRAY);
    private ImageButton ibRecord;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tvSkipLogin = (TextView) findViewById(R.id.tv_skip_login);
        etCode = (EditText) findViewById(R.id.et_code);
        ImageButton ibHelp = (ImageButton) findViewById(R.id.ib_help);
        etAccount = (EditText) findViewById(R.id.et_account);
        FrameLayout flRecord = (FrameLayout) findViewById(R.id.fl_record);
        ibRecord = (ImageButton) findViewById(R.id.ib_record);
        etPwd = (EditText) findViewById(R.id.et_pwd);
        cbChecked = (CheckBox) findViewById(R.id.cb_checked);
        TextView tvLogin = (TextView) findViewById(R.id.tv_login);

        tvSkipLogin.setOnClickListener(this);
        ibHelp.setOnClickListener(this);
        flRecord.setOnClickListener(this);
        tvLogin.setOnClickListener(this);

        createTable();
    }

    /**
     * 创建表
     */
    private void createTable() {
        SQLiteDatabase userDB = openOrCreateDatabase("user.db", MODE_PRIVATE, null);
        userDB.execSQL(CREATETABLE);
        userDB.close();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.tv_skip_login:
                onBackPressed();
                break;
            case R.id.ib_help:
                showHelpDialog();
                break;
            case R.id.fl_record:
                showHistoryRecord();
                break;
            case R.id.tv_login:
                login();
                break;
        }
    }

    /**
     * 显示帮助对话框
     */
    private void showHelpDialog() {
        if (helpDialog == null) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this, android.R.style.Theme_Holo_Light_Dialog);
            View inflate = LayoutInflater.from(this).inflate(R.layout.login_help_layout, null);
            inflate.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    helpDialog.dismiss();
                }
            });
            helpDialog = builder.create();
            helpDialog.show();
            Window window = helpDialog.getWindow();
            window.setContentView(inflate);
            window.setBackgroundDrawableResource(android.R.color.transparent);
            WindowManager.LayoutParams lp = window.getAttributes();
            int widthPixels = getResources().getDisplayMetrics().widthPixels;
            lp.width = (int) (widthPixels * 0.8);
            window.setAttributes(lp);
        } else {
            helpDialog.show();
        }
    }

    /**
     * 显示历史记录
     */
    private void showHistoryRecord() {
        queryData();
        InputMethodManager imm = (InputMethodManager) getSystemService(
                Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(etAccount.getWindowToken(), 0, null);
        if (lpw == null) {
            lpw = new ListPopupWindow(this);
            lpw.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    HotspotUserBean hub = hubs.get(position);
                    String code = hub.getCode();
                    etCode.setText(code);
                    etCode.setSelection(code.length());
                    String account = hub.getAccount();
                    etAccount.setText(account);
                    etAccount.setSelection(account.length());
                    String pwd = hub.getPwd();
                    if (!TextUtils.isEmpty(pwd)) {
                        etPwd.setText(pwd);
                        etPwd.setSelection(pwd.length());
                        cbChecked.setChecked(true);
                    }
                    dismiss();
                }
            });
            accountAdapter = new AccountAdapter(this, hubs);
            ColorDrawable backgroundDrawable = new ColorDrawable(Color.WHITE);
            lpw.setBackgroundDrawable(backgroundDrawable);
            lpw.setAdapter(accountAdapter);
            lpw.setWidth(etAccount.getWidth());
            lpw.setHeight(ListPopupWindow.WRAP_CONTENT);
            lpw.setAnchorView(etAccount);
            lpw.setDropDownGravity(Gravity.BOTTOM);
            lpw.setOnDismissListener(new PopupWindow.OnDismissListener() {
                @Override
                public void onDismiss() {
                    ibRecord.setBackgroundResource(R.drawable.denglu_xia);
                }
            });
        } else {
            //当数据发生改变的时候刷新适配器
            accountAdapter.setHubs(hubs);
        }

        //控制提示框的高度
        if (hubs != null && hubs.size() > 5) {
            int heightPixels = getResources().getDisplayMetrics().heightPixels;
            lpw.setHeight((int) (0.2 * heightPixels));
        } else {
            lpw.setHeight(ListPopupWindow.WRAP_CONTENT);
        }

        lpw.show();
        if (lpw.isShowing() && hubs != null && hubs.size() > 0) {
            ibRecord.setBackgroundResource(R.drawable.denglu_shang);
        }
        //必须添加在show()方法之后,否则getListView()方法获取不到ListView实例
        ListView listView = lpw.getListView();
        listView.setDivider(dividerDrawable);
        listView.setDividerHeight(2);
    }


    private void dismiss() {
        lpw.dismiss();
    }

    /**
     * 查询数据
     */
    private void queryData() {
        SQLiteDatabase userDB = openOrCreateDatabase("user.db", MODE_PRIVATE, null);
        Cursor cursor = userDB.rawQuery("select * FROM " + TABLENAME + " order by createdTime desc", null);
        if (cursor != null && cursor.getCount() > 0) {
            if (hubs == null) {   //首次查询时
                hubs = new ArrayList<>();
            } else {   //继续查询
                hubs.clear();
            }
            cursor.moveToFirst();
            //循环读取数据
            while (!cursor.isAfterLast()) {
                //获得当前行的标签
                int codeIndex = cursor.getColumnIndex("code");
                //获得商户代码
                String code = cursor.getString(codeIndex);

                int accountIndex = cursor.getColumnIndex("account");
                //获取账号
                String account = cursor.getString(accountIndex);

                int pwdIndex = cursor.getColumnIndex("pwd");
                String pwd = cursor.getString(pwdIndex);
                HotspotUserBean hub = new HotspotUserBean();

                hub.setAccount(account);
                hub.setCode(code);
                hub.setPwd(pwd);

                hubs.add(hub);
                //游标移到下一行
                cursor.moveToNext();
            }
            cursor.close();
        }
        userDB.close();
    }


    /**
     * 登录
     */
    private void login() {
        String code = etCode.getText().toString().trim();
        String account = etAccount.getText().toString().trim();
        String pwd = etPwd.getText().toString().trim();

        if (TextUtils.isEmpty(code)) {
            Toast.makeText(this, "商户代码不允许为空", Toast.LENGTH_SHORT).show();
            return;
        }

        if (TextUtils.isEmpty(account)) {
            Toast.makeText(this, "账号不允许为空", Toast.LENGTH_SHORT).show();
            return;
        }

        if (TextUtils.isEmpty(pwd)) {
            Toast.makeText(this, "密码不允许为空", Toast.LENGTH_SHORT).show();
            return;
        }

        String result = code + "#" + account + "#" + pwd;
        //TODO 处理登录
        Toast.makeText(this, result, Toast.LENGTH_SHORT).show();

        insertOrUpdateData(code, account, cbChecked.isChecked() ? pwd : "");
    }

    /**
     * 插入数据
     *
     * @param code
     * @param account
     * @param pwd
     */
    private void insertOrUpdateData(String code, String account, String pwd) {
        SQLiteDatabase userDB = openOrCreateDatabase("user.db", MODE_PRIVATE, null);
        Cursor cursor = userDB.rawQuery("select * FROM " + TABLENAME + " where account=" + account, null);

        ContentValues cv = new ContentValues();
        cv.put("code", code);
        cv.put("account", account);
        cv.put("pwd", pwd);

        if (cursor != null && cursor.getCount() > 0) {
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
            String date = df.format(new Date());// new Date()为获取当前系统时间,也可使用当前时间戳
            cv.put("createdTime", date);
            userDB.update(TABLENAME, cv, "account=?", new String[]{account});
        } else {
            userDB.insert(TABLENAME, null, cv);
        }
        userDB.close();
    }

    /**
     * 删除数据
     *
     * @param hub
     */
    public void deleteData(HotspotUserBean hub) {
        SQLiteDatabase userDB = openOrCreateDatabase("user.db", MODE_PRIVATE, null);
        userDB.delete(TABLENAME, "account=?", new String[]{hub.getAccount()});
        userDB.close();
        //数据完全清理完成之后,ListPopupWindow消失
        if (hubs != null && hubs.size() == 0) {
            dismiss();
        }
    }
}

源码地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值