![](/img/trans.png)
[英]Obstacle for retrieving data from SQLite database into a ListView(having TextViews) in Android:
[英]Retrieving data from SQLite database and display it into ListView -android
我在 onCreate 函數中創建了一個帶有表(student)的數據庫(mydb),然后使用按鈕單擊動態輸入值。現在我想通過單擊按鈕從表 student 中檢索所有數據並將其顯示到listview 中。
public class MainActivity extends Activity
{
String name, phone;
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db=openOrCreateDatabase("mydb", MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS student(dbname VARCHAR, dbphone VARCHAR);");
}
public void btnaddtodb(View v)
{
EditText edtxtname = (EditText)findViewById(R.id.edtxtname);
EditText edtxtphone = (EditText)findViewById(R.id.edtxtphone);
name=edtxtname.getText().toString();
phone=edtxtphone.getText().toString();
db.execSQL("INSERT INTO student values('"+name+"','"+phone+"');");
edtxtname.setText("");
edtxtphone.setText("");
}
}
嘗試這樣做...它將 LinearLayout 中表格中的所有值顯示為列表
try{
mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null);
Cursor allrows = mydb.rawQuery("SELECT * FROM "+ TABLE, null);
System.out.println("COUNT : " + allrows.getCount());
Integer cindex = allrows.getColumnIndex("BOOK_DATE");
Integer cindex1 = allrows.getColumnIndex("TRIP_DATE");
Integer cindex2 = allrows.getColumnIndex("LOCATION");
TextView t = new TextView(MybookingsActivity.this);
t.setText("========================================");
//Linear.removeAllViews();
Linear.addView(t);
if(allrows.moveToFirst()){
do{
LinearLayout id_row = new LinearLayout(MybookingsActivity.this);
LinearLayout book_date_row = new LinearLayout(MybookingsActivity.this);
LinearLayout trip_date_row= new LinearLayout(MybookingsActivity.this);
LinearLayout location_row= new LinearLayout(MybookingsActivity.this);
LinearLayout feedback_row= new LinearLayout(MybookingsActivity.this);
final TextView id_ = new TextView(MybookingsActivity.this);
final TextView book_date = new TextView(MybookingsActivity.this);
final TextView trip_date = new TextView(MybookingsActivity.this);
final TextView location = new TextView(MybookingsActivity.this);
final TextView sep = new TextView(MybookingsActivity.this);
final Button feedback = new Button(MybookingsActivity.this);
final String ID = allrows.getString(0);
String BOOK_DATE= allrows.getString(1);
String TRIP_DATE= allrows.getString(2);
String LOCATION= allrows.getString(3);
id_.setTextColor(Color.RED);
id_.setPadding(20, 5, 0, 5);
book_date.setTextColor(Color.RED);
book_date.setPadding(20, 5, 0, 5);
trip_date.setTextColor(Color.RED);
trip_date.setPadding(20, 5, 0, 5);
location.setTextColor(Color.RED);
location.setPadding(20, 5, 0, 5);
System.out.println("BOOK_DATE " + allrows.getString(cindex) + " TRIP_DATE : "+ allrows.getString(cindex1)+ " LOCATION : "+ allrows.getString(cindex2));
System.out.println("ID : "+ ID + " || BOOK_DATE " + BOOK_DATE + "|| TRIP_DATE : "+ TRIP_DATE+ "|| LOCATION : "+LOCATION);
id_.setText("ID : " + ID);
id_row.addView(id_);
Linear.addView(id_row);
book_date.setText("BOOK_DATE : "+BOOK_DATE);
book_date_row.addView(book_date);
Linear.addView(book_date_row);
trip_date.setText("TRIP_DATE : " + TRIP_DATE);
trip_date_row.addView(trip_date);
Linear.addView(trip_date_row);
location.setText("LOCATION : " + LOCATION);
location_row.addView(location);
Linear.addView(location_row);
feedback.setText("Feedback");
feedback.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent(MybookingsActivity.this,FeedbackActivity.class);
intent.putExtra("id", ID);
startActivity(intent);
}
});
feedback_row.addView(feedback);
Linear.addView(feedback_row);
sep.setText("---------------------------------------------------------------");
Linear.addView(sep);
}
while(allrows.moveToNext());
}
mydb.close();
}catch(Exception e){
Toast.makeText(getApplicationContext(), "Error encountered."+e.toString(), Toast.LENGTH_LONG).show();
}
試試吧..不要忘記更改 dbname、tablename 和 fielnames..
通常,您始終可以使用ArrayAdapter
在列表視圖中顯示某些內容。 (有一個關於它的 很好的教程,您可以在互聯網上找到許多其他 教程)
對於數據庫中的東西,除了基本的ArrayAdapter
,你還可以使用CursorAdapter
,它有一些額外的好處,比如動態加載和自動刷新。
要使用CursorAdapter
,讓您的Activity
實現LoaderCallback<Cursor>
及其所需的回調。
初始化一個CursorAdapter
並將其設置為ListView
。
在CreateLoader(...)
方法中,查詢您需要的任何內容。
請記住正確實現newView
和bindView
。
一個最簡單的示例可能如下所示:
public class TestActivity extends Activity implements LoaderCallbacks<Cursor>{
ListView listview;
CursorAdapter cursorAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
cursorAdapter = new CursorAdapter(this, null) {
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView;
rowView = inflater.inflate(R.layout.device_list_item, parent, false);
bindView(rowView, context, cursor);
return rowView;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView textView = view.findViewById(R.id.text);
textView.setText(cursor.getString(0));
}
};
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return db.query(...);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
cursorAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
cursorAdapter.swapCursor(null);
}
}
使用本教程我會幫助你。 1> Android-sqlite-and-listview-example
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.