簡體   English   中英

從 SQLite 數據庫中檢索數據並將其顯示到 ListView -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(...)方法中,查詢您需要的任何內容。

請記住正確實現newViewbindView

一個最簡單的示例可能如下所示:

    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);

      }

    } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM