DBhelper Class
public class DBHelper extends SQLiteOpenHelper{
private static final String DB_NAME_TWO = "Loan_TWO.db";
private static final int VERSION = 1;
private SQLiteDatabase mDb;
public DBHelper(Context context) {
super(context, DB_NAME_TWO, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// db.execSQL("create table " + TABLE_COLLEGES + " ( "
// + COL_ID + " integer primary key autoincrement, "
// + COL_NAME + " text, "
// + COL_ADDRESS + " text);");
db.execSQL("create table " + LOAN_TABLE + " ( "
+ ID + " integer primary key autoincrement, "
+ Name + " text,"
+ START_DATE + " text, "
+ END_DATE + " text, "
+ LOAN_AMOUNT + " integer, "
+ RATE_OF_INTEREST + " integer ,"
+ FINAL_AMOUNT + " integer) ;");
db.execSQL("create table " + AMOUNT_TABLE_ONE + " ( "
+ AMOUNT_ID + " integer primary key autoincrement, "
+ ID + " integer, "
+ Name + " text, "
+ AMOUNT + " text, "
+ BALANCE_AMOUNT + " text, "
+ NEXT_DATE + " text, "
+ TODAYS_DATE + " text); ");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + LOAN_TABLE);
db.execSQL("DROP TABLE IF EXISTS " + AMOUNT_TABLE_ONE);
onCreate(db);
}
}
SearchActivity类
public class SearchActivity extends Activity {
private EditText Search_By_Name;
private ArrayList<Personal_loan> array;
private ArrayAdapter<Personal_loan> adapter;
private ListView listView;
SQLiteDatabase db;
private DBHelper helper;
Personal_loan p = new Personal_loan();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
Search_By_Name = (EditText)findViewById(R.id.SearchName);
array = new ArrayList<Personal_loan>();
listView = (ListView) findViewById(R.id.listView1);
adapter = new ArrayAdapter<Personal_loan>(this, android.R.layout.simple_list_item_1, array);
listView.setAdapter(adapter);
getData();
}
private void getData() {
helper = new DBHelper(this);
db = helper.getWritableDatabase();
String columns[] = new String[] {ID,Name,START_DATE,END_DATE,LOAN_AMOUNT,RATE_OF_INTEREST,FINAL_AMOUNT};
Cursor cursor = db.query( true, LOAN_TABLE, columns,"Name=?",new String[]{"Amit"}, null, null, null, null, null);
if (!cursor.isAfterLast()) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
p = new Personal_loan();
p.id = cursor.getInt(0);
p.name = cursor.getString(1);
p.sd = cursor.getString(2);
p.ed = cursor.getString(3);
p.la = cursor.getDouble(4);
p.roi = cursor.getFloat(5);
p.amt=cursor.getString(6);
array.add(p);
cursor.moveToNext();
Search_By_Name.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count)
{
// TODO Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after)
{
// TODO Auto-generated method stub
}
public void afterTextChanged(Editable s)
{
SearchActivity.this.adapter.getFilter().filter(s);
}
});
}
cursor.close();
db.close();
adapter.notifyDataSetChanged();
}
}
public void onBackPressed() {
// TODO Auto-generated method stub
Intent i=new Intent(SearchActivity.this,FirstActivity.class);
startActivity(i);
}
}
Personal_Loan
public class Personal_loan {
public int id;
String name;
String sd;
String ed;
Double la;
float roi;
String amt;
@Override
public String toString() {
return " Person ID =" + id + "\n Name =" + name + "\n Start Date =" + sd
+ "\n End Date =" + ed + "\n Loan Amount =" + la + "\n Rate Of Interest =" + roi +"\n Loan Final Amount= "+ amt ;
}
}
我想从数据库中搜索名称并根据在edittext
上输入的名称字段过滤列表,上面的代码按最后一个字段搜索列表,即最终金额,但我想按名称搜索它而不是最终金额。
答案 0 :(得分:1)
您正在进行一个完全没有WHERE子句的查询,因此您可以有效地列出表中的所有记录。 请查看query方法的文档,并使用适当的选择和selectionArgs来满足您的需求。
编辑:在我看来,你更新了这个问题。您有一个要在列表视图中列出的sqlite数据库,但是您手动迭代游标,将项添加到数组中,然后在列表视图上使用ArrayAdapter。您应该使用CursorAdapter,甚至是SimpleCursorAdapter,并完全废弃数组。将包含所需查询参数的合适Cursor(包括上面链接中说明的合适where子句)传递给适配器。
当我解释原始问题时,它是关于如何按名称过滤记录,而不是如何创建列表适配器。
答案 1 :(得分:1)
您应该尝试使用SimpleCursorAdapter
代替ArrayAdapter
,并使用adapter.swapCursor(cursor)
将新光标与afterTextChanged
上的正确查询一起使用。
可选地,建议使用loaders进行任何数据库访问,这样就不会减慢主ui线程的速度。
答案 2 :(得分:0)
Use query like
String query = "SELECT * FROM AMOUNT_TABLE_ONE WHERE Name LIKE 'your_expected_name%'"
Cursor cursor = db.rawquery(query,null);
cursor.moveToFirst();
答案 3 :(得分:-1)
使用自定义适配器使用以下代码:
public class SearchActivity extends Activity {
private EditText Search_By_Name;
private ArrayList<Personal_loan> array;
private ListAdapter<Personal_loan> adapter;
private ListView listView;
SQLiteDatabase db;
private DBHelper helper;
Personal_loan p = new Personal_loan();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
Search_By_Name = (EditText)findViewById(R.id.SearchName);
array = new ArrayList<Personal_loan>();
listView = (ListView) findViewById(R.id.listView1);
getData();
adapter = new ListAdapter(this,
android.R.layout.simple_list_item_1, android.R.id.text1, array);
listView.setAdapter(adapter);
Search_By_Name.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count)
{
SearchActivity.this.adapter.getFilter().filter(s);
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after)
{
// TODO Auto-generated method stub
}
public void afterTextChanged(Editable s)
{
}
});
}
private void getData() {
helper = new DBHelper(this);
db = helper.getWritableDatabase();
String columns[] = new String[] {ID,Name,START_DATE,END_DATE,LOAN_AMOUNT,RATE_OF_INTEREST,FINAL_AMOUNT};
Cursor cursor = db.query( true, LOAN_TABLE,null, null, null, null, null);
if (cursor!=null) {
while (cursor.moveToNext()) {
p = new Personal_loan();
p.id = cursor.getInt(0);
p.name = cursor.getString(1);
p.sd = cursor.getString(2);
p.ed = cursor.getString(3);
p.la = cursor.getDouble(4);
p.roi = cursor.getFloat(5);
p.amt=cursor.getString(6);
array.add(p);
}
}
cursor.close();
db.close();
}
public void onBackPressed() {
// TODO Auto-generated method stub
Intent i=new Intent(SearchActivity.this,FirstActivity.class);
startActivity(i);
}
ListAdapter.java:
public class ListAdapter extends ArrayAdapter<Personal_loan> {
private Context context;
private ArrayList<Personal_loan> array;
private ArrayList<Personal_loan> aListDump;
public ListAdapter(Context context, int resource, int textViewResourceId,
ArrayList<Personal_loan> array) {
super(context, resource, textViewResourceId, array);
this.context = context;
this.array = array;
aListDump = array;
}
@Override
public int getCount() {
return array.size();
}
@Override
public Personal_loan getItem(int position) {
return array.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
// TODO Auto-generated method stub
array = (ArrayList<Personal_loan>) results.values;
notifyDataSetChanged();
}
// getting results based on the search text view text
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
String seq = constraint.toString().toLowerCase();
ArrayList<Personal_loan> list = new ArrayList<Personal_loan>();
if (seq.trim().length() == 0 || seq == null) {
results.count = aListDump.size();
results.values = aListDump;
list.addAll(aListDump);
} else {
for (Personal_loan bean : aListDump) {
if (bean.name.toLowerCase().contains(seq.toLowerCase()))
list.add(bean);
}
}
results.count = list.size();
results.values = list;
return results;
}
};
return filter;
}
}