如何填充使用的SQLite我的数据库一个​​ListView [英] How to populate a ListView from my database using sqlite

查看:160
本文介绍了如何填充使用的SQLite我的数据库一个​​ListView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从sqlite的填充我的ListView数据在onclicklistener我的Load按钮。

I was trying to populate my listview with data from sqlite in onclicklistener of my load button.

不过,我是我见过的例子有​​点困惑。这里是我的code中的 TotalResults.java

However, I'm a little confused from the examples I have seen. here is my code in TotalResults.java.

DatabaseManager db = new DatabaseManager(this);
String name;
int score;
TextView result;
TextView saved;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_total_results);

    result = (TextView) findViewById (R.id.textResult);
    saved = (TextView) findViewById (R.id.textLoad);
    Button save = (Button) findViewById (R.id.buttonSave);
    Button load = (Button) findViewById (R.id.buttonLoad);
    Button delete = (Button) findViewById (R.id.buttonDelete);
      Intent intent = getIntent();
      name = intent.getExtras().getString("name");
      score = intent.getExtras().getInt("score");

      result.setText("Name: "+name+" , Score: "+score );

      save.setOnClickListener(new OnClickListener(){

            public void onClick(View v) {

                db.addContact(new PlayerData(name,score));
                Log.d("Inserting: ", name);
                Log.d("Inserting: ", Integer.toString(score));

            } 
      });



      load.setOnClickListener(new OnClickListener(){

            public void onClick(View v) {

                List<PlayerData> contacts = db.getAllContacts();
                //check to ensure there are users

                setListAdapter(new ListAdapter(this,
                        android.R.layout.simple_list_item_1, contacts));
                if(contacts.size()==0) {
                    String text = "No players stored.";
                    Toast.makeText(TotalResults.this, text, Toast.LENGTH_SHORT).show();
                } else {
                    PlayerData player = contacts.get(0);
                    String showName = player.getName();
                    int showScore = player.getscore();
                    Log.d("Getting:", showName);
                    Log.d("Getting:", Integer.toString(showScore));
                    saved.setText("Player Name: "+showName+" Player Score: "+showScore);
                }
            } 
      });

          delete.setOnClickListener(new OnClickListener(){

                public void onClick(View v) {

                    List<PlayerData> contacts = db.getAllContacts();
                    //check to ensure there are users
                    if(contacts.size()==0) {
                        String text = "No players to delete.";
                        Toast.makeText(TotalResults.this, text, Toast.LENGTH_SHORT).show();
                    } else {
                        PlayerData player = contacts.get(0);
                        String showName = player.getName();
                        int showScore = player.getscore();
                        Log.d("Deleting:", showName);
                        Log.d("Deleting:", Integer.toString(showScore));
                        db.deleteContact(player);
                    }

                } 
          });

下面是我的数据库code。

Here is my database code.

public class DatabaseManager extends SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "contactsManager";

// Contacts table name
private static final String TABLE_CONTACTS = "contacts";

// Contacts Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_PH_NO = "phone_number";

public DatabaseManager(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
            + KEY_PH_NO + " TEXT" + ")";
    db.execSQL(CREATE_CONTACTS_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

    // Create tables again
    onCreate(db);
}

/**
 * All CRUD(Create, Read, Update, Delete) Operations
 */

// Adding new contact
void addContact(PlayerData contact) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName()); // Contact Name
    values.put(KEY_PH_NO, contact.getscore()); // Contact Phone

    // Inserting Row
    db.insert(TABLE_CONTACTS, null, values);
    db.close(); // Closing database connection
}

// Getting single contact
PlayerData getContact(int id) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
            KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
            new String[] { String.valueOf(id) }, null, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();

    PlayerData contact = new PlayerData(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getInt(2));

    cursor.close();
    // return contact
    return contact;
}

// Getting All Contacts
public List<PlayerData> getAllContacts() {
    List<PlayerData> contactList = new ArrayList<PlayerData>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            PlayerData contact = new PlayerData();
            contact.setID(Integer.parseInt(cursor.getString(0)));
            contact.setName(cursor.getString(1));
            contact.setscore(cursor.getInt(2));
            // Adding contact to list
            contactList.add(contact);
        } while (cursor.moveToNext());
    }
    cursor.close();
    // return contact list
    return contactList;
}

// Updating single contact
public int updateContact(PlayerData contact) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName());
    values.put(KEY_PH_NO, contact.getscore());

    // updating row
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
            new String[] { String.valueOf(contact.getID()) });
}

// Deleting single contact
public void deleteContact(PlayerData contact) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
            new String[] { String.valueOf(contact.getID()) });
    db.close();
}


// Getting contacts Count
public int getContactsCount() {
    String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.close();

    // return count
    return cursor.getCount();
}

}

我在这个方法得到一个错误:

I get an error in this method:

  load.setOnClickListener(new OnClickListener(){

                public void onClick(View v) {

                    List<PlayerData> contacts = db.getAllContacts();
                    //check to ensure there are users

                    setListAdapter(new ListAdapter(this,
                            android.R.layout.simple_list_item_1, contacts));
                    if(contacts.size()==0) {
                        String text = "No players stored.";
                        Toast.makeText(TotalResults.this, text, Toast.LENGTH_SHORT).show();
                    } else {
                        PlayerData player = contacts.get(0);
                        String showName = player.getName();
                        int showScore = player.getscore();
                        Log.d("Getting:", showName);
                        Log.d("Getting:", Integer.toString(showScore));
                        saved.setText("Player Name: "+showName+" Player Score: "+showScore);
                    }
                } 
          });

和我得到一个错误说:无法实例的类型ListAdapter,ListAdapter不能被解析为一个类型

and i get an error saying : cannot instantiate the type ListAdapter, ListAdapter cannot be resolved to a type.

请帮忙。提前致谢。 :)

please help. Thanks in advance. :)

推荐答案

使用一个CustomAdapter

Use a CustomAdapter

public class Display extends Activity implements OnItemClickListener{

    DatabaseManager db;
    List<PlayerData> contacts;
    ArrayList<String> con= new ArrayList<String>();
    LayoutInflater mInflater;
    CheckBox cb;
    TextView tv1;
    CustomAdapter cus;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview);
        ListView lv= (ListView) findViewById(R.id.lv);
        db = new DatabaseManager(this);

           contacts = db.getAllContacts();       
        cus = new CustomAdapter();
        lv.setAdapter(cus);
        lv.setOnItemClickListener(this); 
        lv.setItemsCanFocus(false);
        lv.setTextFilterEnabled(true);
        Button b= (Button) findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener()
        {

            @Override
            public void onClick(View v) {
                StringBuilder sb = new StringBuilder();
                for(int i = 0; i < contacts.size(); i++)

                {
                if(cus.mCheckStates.get(i)==true)
                {
                    sb.append(contacts.get(i).getPhoneNumber());
                    sb.append("\n");

                }                    
            }
                Toast.makeText(getApplicationContext(), sb,
                            Toast.LENGTH_LONG).show();
                Intent intent = new Intent(Display.this,SendMessage.class);
                if(con!=null)
                {
                intent.putStringArrayListExtra("list",con);
                startActivity(intent);
                }
            }
        });

    }
    public void onItemClick(AdapterView parent, View view, int
            position, long id) {
                cus.toggle(position);

            }
    class CustomAdapter extends BaseAdapter implements CompoundButton.OnCheckedChangeListener
    {
          private SparseBooleanArray mCheckStates;
        CustomAdapter()
        {
            mCheckStates = new SparseBooleanArray(contacts.size());
             mInflater = (LayoutInflater)Display.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return contacts.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub

            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View vi=convertView;
            if(convertView==null)
             vi = mInflater.inflate(R.layout.rowlayout, null); 
             TextView tv= (TextView) vi.findViewById(R.id.textView1);
             tv1= (TextView) vi.findViewById(R.id.textView2);
             cb = (CheckBox) vi.findViewById(R.id.checkBox1);
             tv.setText("Name :"+ contacts.get(position).getName());
             tv1.setText("Phone No :"+ contacts.get(position).getPhoneNumber());
             cb.setTag(position);
             cb.setChecked(mCheckStates.get(position, false));
             cb.setOnCheckedChangeListener(this);
            return vi;
        }
         public boolean isChecked(int position) {
                return mCheckStates.get(position, false);
            }

            public void setChecked(int position, boolean isChecked) {
                mCheckStates.put(position, isChecked);
                notifyDataSetChanged();
            }

            public void toggle(int position) {
                setChecked(position, !isChecked(position));
            }
        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            // TODO Auto-generated method stub
             mCheckStates.put((Integer) buttonView.getTag(), isChecked);    

        }

    }

}

listview.xml

listview.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/lv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:layout_above="@+id/button1"/>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="Button" />

</RelativeLayout>

rowlayout.xml

rowlayout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="34dp"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/checkBox1"
        android:layout_alignLeft="@+id/textView1"
        android:text="TextView" />

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView1"
        android:layout_marginRight="33dp"
        android:text="@string/choice" />

</RelativeLayout>

在列表视图中的每一行看起来像下面。您可以单击复选框以选择和取消选择。稍后,您可以选择的项目,并采取一切必要。

Each row in listview will look like below. You can click the check box to select and unselect. Later you can get the selected item and do whatever is required.

选中复选框后单击底部的按钮。

Click the button at the bottom after checking the checkbox.

这篇关于如何填充使用的SQLite我的数据库一个​​ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆