Android 数据库SQLite入门练习:实现浏览器浏览链接保存并显示到AutoCompleteTextView

参考https://blog.csdn.net/yyingwei/article/details/8128899这篇博客尝试了一下Android 浏览器开发,然后尝试把浏览过的链接保存起来下次输入的时候可以自动选择。

代码中控制这些字符串是通过ArrayAdapter,每次打开时先创建一个空的ArrayAdapter,然后从数据库里读出保存的url添加到ArrayAdapter中,再用AutoCompleteTextView.setAdapter完成配置。

在setAdapter之后可以动态地修改ArrayAdapter对象的内容,这些修改都能同步到页面上。

数据库的定义:

import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class BrowserDatabaseHelper extends SQLiteOpenHelper {
    private Context mContext;
    private static final String SQL_CREATE_URL_HISTORY = "create table url_history  (url text primary key)"; //这里数据库只需要在onCreate时执行这一句,创建名为url_history的表,其中有一列名为url并且是主key

    public BrowserDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version, @Nullable DatabaseErrorHandler errorHandler) {
        super(context, name, factory, version, errorHandler);
        mContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL_CREATE_URL_HISTORY);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

url_history是表名字,url是唯一的一列,设置为primary key.

保存和读取浏览过的链接:

url =  (AutoCompleteTextView)activity.findViewById(R.id.url);
mBrowserDatabaseHelper = new BrowserDatabaseHelper(this, DATABASE_NAME, null, 1, null); //DATABASE_NAME可以自己定义,1是版本号最小为1
SQLiteDatabase db = mBrowserDatabaseHelper.getReadableDatabase();
Cursor cursor = db.query("url_history", null, null, null, "url", null, null); //获取光标查询"url"这一列
ArrayAdapter<String> openUrlAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line); //这里创建了一个空的ArrayAdapter<String>
while(cursor.moveToNext()) { //一开始从数据库里读取所有已存的链接
    openUrlAdapter.add(cursor.getString(cursor.getColumnIndex("url")));
}
cursor.close();
url.setAdapter(openUrlAdapter); //将ArrayAdapter配置到AutoCompleteTextView
url.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
            String strUrl = url.getText().toString();
            ContentValues values = new ContentValues();
            values.clear();
            values.put("url", strUrl);
            //这里要用insertWithOnConflict并且参数要用SQLiteDatabase.CONFLICT_IGNORE,为了不重复添加,需要在数据库中把"url"设置成主key
            if(mBrowserDatabaseHelper.getReadableDatabase().insertWithOnConflict("url_history", null, values, SQLiteDatabase.CONFLICT_IGNORE) > 0) {
                openUrlAdapter.add(strUrl); //如果没有重复,则在添加到数据库的同时也添加到当前的ArrayAdapter中
            }
            Pattern p = Pattern.compile("https://([\\w-]+\\.)+[\\w-]+(/[\\w-\\./?%=]*)?");
            Matcher m = p.matcher(strUrl);
            if(!m.find()) {
                strUrl = "https://" + strUrl;
            }
            if(strUrl == null)strUrl = "https://cn.bing.com";
            show.loadUrl(strUrl);
            return true;
        }
        return false;
    }
});
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值