gpt4 book ai didi

Android Sqlite 显示随机行

转载 作者:行者123 更新时间:2023-11-29 17:55:48 25 4
gpt4 key购买 nike

我目前正在开发一个应用程序。它的作用是,用户输入一些句子,然后应用程序将获取歧义词,然后显示其含义。在我的表中,我有 _id、word、meaning、definition_number 等字段。

示例数据:
_id 词 含义 definition_number
1 Break 暂停某事 1
2 Break 切成 fragment 2

如果用户输入:My break was very fast。预期的输出将是:
歧义词: Break
含义:暂停某事

我想随机显示它。这是我的 DBHelper.class 中的一段代码:

        public Cursor getAllWords()
{
Cursor localCursor =
//this.myDataBase.query(DB_TABLE, new String[] {
// KEY_ID, KEY_WORD, KEY_MEANING }, null, null, null, null, null);//"RANDOM()");
//this.myDataBase.query(DB_TABLE, new String[] {
// KEY_ID, KEY_WORD, KEY_MEANING }, null, null, null, null, "RANDOM()", " 1");
this.myDataBase.query(DB_TABLE, new String[] {
KEY_ID, KEY_WORD, KEY_MEANING },
null, null, null, null, "RANDOM()");
if (localCursor != null){
localCursor.moveToFirst();
}

return localCursor;


}

MainActivity.class:

    ArrayList<String> colWords = new ArrayList<String>();
ArrayList<String> colMeanings = new ArrayList<String>();
String[] words;
String[] meanings;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initControls();

}

private void initControls() {
// TODO Auto-generated method stub
text = (EditText) findViewById (R.id.editText1);

view = (TextView) findViewById (R.id.textView1);

clear = (Button) findViewById (R.id.button2);

clear.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
text.setText("");
view.setText("");

}
});


connectDB();

ok = (Button) findViewById (R.id.button1);
ok.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//Log.d(strWord, strWord);

strWord = text.getText().toString();
if(strWord.isEmpty()){
Toast.makeText(MainActivity.this, "Please input some data", Toast.LENGTH_SHORT).show();
} else {
checkAmbiguousWord();
}
}
});
}

private void connectDB(){
dbHelper = new DBHelper(MainActivity.this);

try {

dbHelper.createDataBase();

} catch (IOException ioe) {

throw new Error("Unable to create database");

}

try {

dbHelper.openDataBase();

} catch (SQLException sqle) {

throw sqle;

}

cursor = dbHelper.getAllWords();




/*strWord = cursor.getString(cursor.getColumnIndex(DBHelper.KEY_WORD))
+ cursor.getString(cursor.getColumnIndex(DBHelper.KEY_MEANING)); */

colWords.clear();///added code
colMeanings.clear();///added code
/*
for(cursor.moveToFirst(); cursor.moveToNext(); cursor.isAfterLast()) {
colWords.add(cursor.getString(1));
colMeanings.add(cursor.getString(2));
String records = cursor.getString(0);

Log.d("Records", records);
} */

if (cursor != null) {
if (cursor.moveToFirst()) {
do {
colWords.add(cursor.getString(1));
colMeanings.add(cursor.getString(2));
String records = cursor.getString(0);

Log.d("Records", records);
} while (cursor.moveToNext());
}
}

}

private void checkAmbiguousWord(){
final String textToCheck = text.getText().toString();
List<Integer> ambiguousIndexes = findAmbiguousWordIndexes(textToCheck);
view.setText(!ambiguousIndexes.isEmpty() ?
ambigousIndexesToMessage(ambiguousIndexes) : "No ambiguous word/s found.");
}

/**
* @param text checked for ambiguous words
* @return the list of indexes of the ambiguous words in the {@code words} array
*/
private List<Integer> findAmbiguousWordIndexes(String text) {
final String lowerCasedText = text.toLowerCase();
final List<Integer> ambiguousWordIndexList = new ArrayList<Integer>();

words = (String[]) colWords.toArray(new String[colWords.size()]);
meanings = (String[]) colMeanings.toArray(new String[colMeanings.size()]);

for (int i = 0; i < words.length; i++) {
if (lowerCasedText.contains(words[i].toLowerCase())) {
ambiguousWordIndexList.add(i);
}
}
return ambiguousWordIndexList;
}

public String ambigousIndexesToMessage(List<Integer> ambiguousIndexes) {
// create the text using the indexes
// this is an example implementation
StringBuilder sb = new StringBuilder();

for (Integer index : ambiguousIndexes) {
sb.append("Ambiguous words: ");
sb.append(words[index] + "\nMeaning: " + meanings[index] + "\n");
sb.append("");
}
return sb.toString();
}

但它所做的只是显示两条记录。 id 1和id 2。我只想随机显示一条记录。我真的需要这方面的帮助。有任何想法吗?我很乐意感激。

最佳答案

您有 RANDOM() 排序,但您还需要添加 LIMIT 1 以仅返回一个结果行。有一个 overload of SQLiteDatabase.query() that takes in a limit parameter :

this.myDataBase.query(DB_TABLE, new String[] { 
KEY_ID, KEY_WORD, KEY_MEANING },
null, null, null, null, "RANDOM()", "1");

关于Android Sqlite 显示随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19511592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com