本文介绍了如何通过&QUOT [字符串]分开; - "并进行多列在Android?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我工作的一个检索字典。其原料数据库是由分离 - 像
ColumnA(Key_Word)ColumnB(Key_defination)
苹果 - 一类的水果
芒果 - 一个水果也
但我想使它3列(列C将Key_details)
ColumnA ColumnB ColumnC(Key_details)
苹果 - 一个一种水果 - 圆形
芒果 - 一个水果也 - 发现在孟加拉国
当人们搜索,应用程序将显示列B和C.为什么我splited字符串的原因是我想说明Coumn B和C不同的窗口上。怎么做?这里是我的源头 -
/ **
*包含逻辑从字典返回特定单词,
*加载字典表时,需要创建它。
* /
公共类DictionaryDatabase {
私有静态最后弦乐TAG =DictionaryDatabase; //列,我们将包含在字典表
公共静态最后弦乐KEY_WORD = SearchManager.SUGGEST_COLUMN_TEXT_1;
公共静态最后弦乐KEY_DEFINITION = SearchManager.SUGGEST_COLUMN_TEXT_2; 私有静态最后弦乐DATABASE_NAME =字典;
私有静态最后弦乐FTS_VIRTUAL_TABLE =FTSdictionary;
私有静态最终诠释DATABASE_VERSION = 2; 私人最终DictionaryOpenHelper mDatabaseOpenHelper;
私有静态最后的HashMap<字符串,字符串> mColumnMap = buildColumnMap();
公共DictionaryDatabase(上下文的背景下){
mDatabaseOpenHelper =新DictionaryOpenHelper(背景);
} 私有静态HashMap的<字符串,字符串> buildColumnMap(){
HashMap的<字符串,字符串>地图=新的HashMap<字符串,字符串>();
map.put(KEY_WORD,KEY_WORD);
map.put(KEY_DEFINITION,KEY_DEFINITION);
map.put(BaseColumns._IDROWID AS+
BaseColumns._ID);
map.put(SearchManager.SUGGEST_COLUMN_INTENT_DATA_IDROWID AS+
SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID);
map.put(SearchManager.SUGGEST_COLUMN_SHORTCUT_IDROWID AS+
SearchManager.SUGGEST_COLUMN_SHORTCUT_ID);
返回地图;
}
公共光标屏幕取词(ROWID的字符串,字符串[]列){
字符串选择=ROWID =?;
的String [] = selectionArgs两个新的String [] {} ROWID; 返回查询(选择,selectionArgs两个,列);
}
公共光标getWordMatches(查询字符串,字符串[]列){
字符串选择= KEY_WORD +匹配吗?
的String [] = selectionArgs两个新的String [] {查询+*}; 返回查询(选择,selectionArgs两个,列);
}
私人光标查询(选择字符串,字符串[] selectionArgs两个,字符串[]列){
SQLiteQueryBuilder建设者=新SQLiteQueryBuilder();
builder.setTables(FTS_VIRTUAL_TABLE);
builder.setProjectionMap(mColumnMap); 光标光标= builder.query(mDatabaseOpenHelper.getReadableDatabase()
列,选择,selectionArgs两个,NULL,NULL,NULL); 如果(光标== NULL){
返回null;
}否则如果(!cursor.moveToFirst()){
cursor.close();
返回null;
}
返回游标;
} 私有静态类DictionaryOpenHelper扩展SQLiteOpenHelper { 私人最终上下文mHelperContext;
私人SQLiteDatabase mDatabase;
私有静态最后弦乐FTS_TABLE_CREATE =
创建虚拟表+ FTS_VIRTUAL_TABLE +
使用FTS3(+
KEY_WORD +,+
KEY_DEFINITION +);; DictionaryOpenHelper(上下文的背景下){
超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
mHelperContext =背景;
} @覆盖
公共无效的onCreate(SQLiteDatabase DB){
mDatabase = DB;
mDatabase.execSQL(FTS_TABLE_CREATE);
loadDictionary();
} 私人无效loadDictionary(){
新主题(新的Runnable接口(){
公共无效的run(){
尝试{
借词();
}赶上(IOException异常五){
抛出新的RuntimeException(E);
}
}
})。开始();
} 私人无效借词()抛出IOException
Log.d(TAG加载的话...);
最后的资源资源= mHelperContext.getResources();
为InputStream的InputStream = resources.openRawResource(R.raw.definitions);
读者的BufferedReader =新的BufferedReader(新的InputStreamReader(InputStream的)); 尝试{
串线;
而((行= reader.readLine())!= NULL){
串[]字符串= TextUtils.split(行, - );
如果(strings.length 2)继续;
长的id = addWord(串[0] .trim(),字符串[1] .trim());
如果(ID℃,){
Log.e(TAG,无法添加一句话:+串[0] .trim());
}
}
} {最后
reader.close();
}
Log.d(TAG,加载完成的话。);
} 众长addWord(字符串文字,字符串的定义){
ContentValues initialValues =新ContentValues();
initialValues.put(KEY_WORD,字);
initialValues.put(KEY_DEFINITION,定义); 返回mDatabase.insert(FTS_VIRTUAL_TABLE,空,initialValues);
} @覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
Log.w(TAG,从版本升级数据库+ oldVersion +到
+ NEWVERSION +,这将摧毁所有旧数据);
db.execSQL(DROP TABLE IF EXISTS+ FTS_VIRTUAL_TABLE);
的onCreate(DB);
}
}}
解决方案
的String [] = ARR string.split( - );
EDIT:
long id = addWord(strings[0].trim(), strings[1].trim());
Above line should be:
long id = addWord(strings[0].trim(), strings[1].trim(),strings[2].trim());
And change your addWord function as I mentioned below.
public long addWord(String word, String definition,String details) {
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_WORD, word);
initialValues.put(KEY_DEFINITION, definition);
initialValues.put(KEY_DETAILS, details);
return mDatabase.insert(FTS_VIRTUAL_TABLE, null, initialValues);
}
这篇关于如何通过&QUOT [字符串]分开; - "并进行多列在Android?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!