【发布时间】:2017-05-24 16:50:56
【问题描述】:
我正在制作 android 应用程序,该应用程序在按下 button.setOnClick() 的按钮时从 EditText 获取用户输入,并使用 string.getText() 搜索数据库。但是字符串变为空,我无法发送它
搜索功能所在的DbBackend.class。 我检查了数据库在静态查询上工作正常,您可以将其设置为 = "xyz" 但我无法使用用户输入来查询数据库。
这是我的代码:MainActivity.java
package com.vadhod.dictcopy;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import java.sql.Array;
import java.util.ArrayList;
import java.util.concurrent.ExecutionException;
import static android.app.PendingIntent.getActivity;
public class MainActivity extends AppCompatActivity {
TextView textView;
EditText searchBar;
Button searchButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final DbBackend dbBackend = new DbBackend(MainActivity.this);
searchBar = (EditText) findViewById(R.id.searchBar);
searchButton = (Button) findViewById(R.id.searchButton);
textView = (TextView)findViewById(R.id.textView);
searchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
String input = searchBar.getText().toString();
ArrayList<String> terms = dbBackend.getList(input);
StringBuilder builder = new StringBuilder();
for (String details : terms) {
builder.append(details + "\n");
}
textView.setText(builder.toString());
}catch (Exception e){
e.printStackTrace();
}
}
});
}
}
DbBackend.java
package com.vadhod.dictcopy;
import ...
public class DbBackend extends DatabaseObject {
public DbBackend(Context context){
super(context);
}
public ArrayList<String> getList(String search){
ArrayList<String> kWords = new ArrayList<String>();
String searchQuery = "SELECT kName FROM dictionary WHERE eName LIKE '%" + search + "%'";
try {
Cursor kCursor = this.getDbConnection().rawQuery(searchQuery, null);
if (kCursor != null){
kCursor.moveToFirst();
for (int i = 0; i < kCursor.getCount(); i++ ){
String sword = kCursor.getString(kCursor.getColumnIndexOrThrow("kName"));
kWords.add(sword);
kCursor.moveToNext();
}
kCursor.close();
return kWords;
}
return kWords;
}catch (Exception e){
e.printStackTrace();
}
return kWords;
}
}
关于当用户按下搜索按钮并通过数据库搜索并返回查询时如何使用字符串的任何帮助?
更新了移动的代码
【问题讨论】:
-
什么是DatabaseObject?
-
这是两个支持的 java 类 DatabaseObject.java 和 DictionaryDatabase.java。我正在使用来自 github 的 com.readystatesoftware.sqliteasset:sqliteassethelper:+
-
其他一切都运行良好。如果我愿意,可以检索所有对象并将其显示在列表视图中。但我不需要,所以删除了该代码
-
写了答案,不确定是否足够清楚。如果没有,可以尝试详细说明。
-
@khusrav 照你说的做了。在 onClick 中移动了 stringbuilder 代码,但出现了 null 错误。有没有其他方法可以在按钮单击时从 editText 中提取数据
标签: java android android-sqlite android-database