参考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;
}
});
本文介绍了一种在Android应用中实现浏览器历史记录的方法。通过SQLite数据库保存和读取URL,利用ArrayAdapter和AutoCompleteTextView实现了自动填充功能。

361

被折叠的 条评论
为什么被折叠?



