安卓:填充的ListView与数据库数据库、ListView

2023-09-06 19:06:51 作者:患得患失

随后虽没有成功的几个例子,我发现自己在这个问题上是死路一条。我遇到的问题是如何用红色填充的ListView 与数据库中的数据。

的目的是创造与从数据库中只显示名称列在ListView的屏幕,那么当项目被选中的应用程序进入到一个新的屏幕,它显示与该项目有关的其他数据。

我想帮助理解的东西都尽显的ListView 从刚才的名称列中的数据从我的数据库表中的联系人,然后,得到从基于所选择的项目的数据库的行数据。

下面是code为ContactsMenu类,这里的名字将被显示出来。

 包com.emailandcontactmanager;

进口android.app.Activity;
进口android.app.AlertDialog;
进口android.content.DialogInterface;
进口android.content.Intent;
进口android.database.Cursor;
进口android.os.Bundle;
进口android.view.Menu;
进口android.view.MenuInflater;
进口android.view.MenuItem;
进口android.view.View;
进口android.widget.Button;
进口android.widget.ListView;
进口android.widget.SimpleCursorAdapter;
进口android.widget.Toast;

公共类ContactsMenu延伸活动​​{


    ListView控件的ListView;
    公共静态最终字符串字段[] = {DatabaseSetup.colName};
    光标光标;

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.managecontacts);
        ListView的=(的ListView)findViewById(R.id.lstContacts);
        DatabaseSetup.init(本);

        按钮btnAddItem =(按钮)findViewById(R.id.btnAddContact);
        btnAddItem.setOnClickListener(新View.OnClickListener(){
        公共无效的onClick(视图v){
            意图的addItem =新的意图(v.getContext(),AddContact.class);
            startActivity(的addItem);
        }
        });
    }
        @覆盖
        保护无效的onPause(){
            listView.setAdapter(空);
            cursor.close();
            DatabaseSetup.deactivate();
            super.onPause();
        }

        @覆盖
        保护无效onResume(){
            super.onResume();
            DatabaseSetup.init(本);
            光标= DatabaseSetup.getContactNames();
            SimpleCursorAdapter适配器=新SimpleCursorAdapter(这一点,R.layout.row,光标,领域,新的INT [] {R.id.item_text});
            listView.setAdapter(适配器);
        }


    DialogInterface.OnClickListener dialogClickListener =新DialogInterface.OnClickListener(){
        公共无效的onClick(DialogInterface对话,诠释它){
            切换(这){
            案例DialogInterface.BUTTON_POSITIVE:
                完();
                打破;

            案例DialogInterface.BUTTON_NEGATIVE:
                //对没有按一下按钮没有任何反应,且菜单关闭
                打破;
            }
        }
    };

    @覆盖
    公共布尔onCreateOptionsMenu(菜单MainMenu的){
        MenuInflater充气= getMenuInflater();
        inflater.inflate(R.menu.mainmenu,MainMenu的);
        返回true;
    }

    @覆盖
    公共布尔onOptionsItemSelected(菜单项项){
        最后的CharSequence []项目= {联系人列表,添加联系人};

        开关(item.getItemId()){
            案例R.id.help:AlertDialog.Builder建设者=新AlertDialog.Builder(本);
                                builder.setTitle(选择功能revice关于它的信息。);
                                builder.setItems(项目,新DialogInterface.OnClickListener(){
                                    公共无效的onClick(DialogInterface对话,诠释选择){
                                        开关(选择){
                                        情况下0:
                                            Toast.makeText(getApplicationContext(),
                                                    允许您查看所选择的项目,使editations它或删除它。
                                                    Toast.LENGTH_LONG).show();
                                            打破;
                                        情况1:
                                            Toast.makeText(getApplicationContext(),
                                                    允许您添加通过打开其中nececary信息可以进入一个屏幕一个新的接触。
                                                    Toast.LENGTH_LONG).show();
                                        }
                                    }
                                });
                                builder.show();
                                打破;

                                案例R.id.back:AlertDialog.Builder builderBack =新AlertDialog.Builder(本);
                                                    builderBack.setMessage(你确定吗?)。setPositiveButton(是,dialogClickListener)
                                                    .setNegativeButton(否,dialogClickListener).show();
                                打破;
        }
        返回true;

    }
}
 

数据库设置类

 包com.emailandcontactmanager;

进口android.content.ContentValues​​;
进口android.content.Context;
进口android.database.Cursor;
进口android.database.sqlite.SQLiteDatabase;
进口android.database.sqlite.SQLiteOpenHelper;

/ *
 * 用法:
 * DatabaseSetup.init(egActivityOrContext);
 * DatabaseSetup.createEntry()或DatabaseSetup.getContactNames()或DatabaseSetup.getDb()
 * DatabaseSetup.deactivate(),然后完成任务
 * /

类DatabaseSetup扩展SQLiteOpenHelper {
静态DatabaseSetup实例= NULL;
静态SQLiteDatabase DB = NULL;

公共静态无效的init(上下文的背景下){
    如果(空==实例){
        例如=新DatabaseSetup(上下文);
        }
    }

公共静态SQLiteDatabase getDb(){
    如果(空== DB){
        DB = instance.getWritableDatabase();
        }
    返回分贝;
    }

公共静态无效停用(){
    如果(空= DB&放大器;!&安培; db.isOpen()){
        db.close();
        }
    DB = NULL;
    例如= NULL;
    }

公共静态长createEntry(字符串名称,字符串邮箱,字符串PHONE1,
        字符串PHONE2,地址字符串,字符串注释){
    ContentValues​​ CV =新ContentValues​​();
    cv.put(COLNAME,姓名);
    cv.put(colMail,邮件);
    cv.put(colPhone1,PHONE1);
    cv.put(colPhone2,PHONE2);
    cv.put(colAddress,地址);
    cv.put(colNotes,票据);
    返回getDb()插入(contactsTable,空,CV)。

    }

公共静态光标getContactNames(){
    // TODO自动生成方法存根
    的String []列=新的String [] {_id,COLNAME};
    返回getDb()查询(contactsTable,列,NULL,NULL,NULL,NULL,
            空值);
    }

DatabaseSetup(上下文的背景下){
    超(背景下,数据库名,空,dbVersion);
    }

@覆盖
公共无效的onCreate(SQLiteDatabase DB){
    // TODO自动生成方法存根
    db.execSQL(CREATE TABLE IF NOT EXISTS+ contactsTable
            +(_id整数主键自动增量,+ COLNAME
            +TEXT NOT NULL,+ colMail +TEXT NOT NULL,+ colPhone1
            +TEXT NOT NULL,+ colPhone2 +TEXT NOT NULL,
            + colAddress +TEXT NOT NULL,+ colNotes
            +TEXT NOT NULL));

    db.execSQL(CREATE TABLE IF NOT EXISTS+ templatesTable
            +(_id整数主键自动增量,+ colSubject
            +TEXT NOT NULL,+ colBody +TEXT NOT NULL));

    db.execSQL(CREATE TABLE IF NOT EXISTS+ tagsTable
            +(_id整数主键自动增量,+ colTagName
            +TEXT NOT NULL,+ colContact +TEXT NOT NULL));

    }

@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
    db.execSQL(DROP TABLE IF EXISTS+ contactsTable);
    db.execSQL(DROP TABLE IF EXISTS+ templatesTable);
    db.execSQL(DROP TABLE IF EXISTS+ tagsTable);
    的onCreate(DB);
    }

静态最后弦乐DBNAME =数据库;
静态最终诠释dbVersion = 1;
静态最后弦乐contactsTable =联系人;
静态最后弦乐COLNAME =名称;
静态最后弦乐colMail =电子邮件;
静态最后弦乐colPhone1 =电话1;
静态最后弦乐colPhone2 =电话2;
静态最后弦乐colAddress =地址;
静态最后弦乐colNotes =注意事项;

静态最后弦乐templatesTable =模板;
静态最后弦乐colSubject =主题;
静态最后弦乐colBody =身体;

静态最后弦乐tagsTable =标签;
静态最后弦乐colTagName =名称;
静态最后弦乐colContact =联系;

}
 
LIstview的使用和数据填充

在code的类添加到联系人菜单。它曾经上班的时候我有一个临时的显示,但是,现在却没有。

 包com.emailandcontactmanager;

进口android.app.Activity;
进口android.app.Dialog;
进口android.os.Bundle;
进口android.view.View;
进口android.widget.Button;
进口android.widget.EditText;
进口android.widget.TextView;

公共类的addContact扩展活动
{

    按钮saveContact;
    EditText上联系人姓名,contactMail,contactPhone1,contactPhone2,contactAddress,contactNotes;

    @覆盖
    公共无效的onCreate(包savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.newcontact);


        联系人姓名=(EditText上)findViewById(R.id.txtName);
        contactMail =(EditText上)findViewById(R.id.txtMail);
        contactPhone1 =(EditText上)findViewById(R.id.txtPhone1);
        contactPhone2 =(EditText上)findViewById(R.id.txtPhone2);
        contactAddress =(EditText上)findViewById(R.id.txtAddress);
        contactNotes =(EditText上)findViewById(R.id.txtNotes);
       // saveContact =(按钮)findViewById(R.id.btnSaveContact);

        按钮btnSaveContact =(按钮)findViewById(R.id.btnSaveContact);
        btnSaveContact.setOnClickListener(新View.OnClickListener()
        {
            公共无效的onClick(视图v)
            {
                布尔工作= TRUE;

                尝试{
                    字符串名称= contactName.getText()的toString()。
                    。字符串的邮件= contactMail.getText()的toString();
                    。字符串PHONE1 = contactPhone1.getText()的toString();
                    。字符串PHONE2 = contactPhone2.getText()的toString();
                    。字符串地址= contactAddress.getText()的toString();
                    串音符= contactNotes.getText()的toString()。

                    DatabaseSetup进入=新DatabaseSetup(AddContact.this);
                    DatabaseSetup.getDb();
                    DatabaseSetup.createEntry(姓名,邮箱,PHONE1,PHONE2,地址,备注);
                    entry.close();

                    }
                    赶上(例外五)
                    {
                        工作= FALSE;
                        字符串错误= e.toString();
                        对话D =新的对话框(AddContact.this);
                        d.setTitle(错误);
                        TextView的电视=新的TextView(AddContact.this);
                        tv.setText(错误);
                    }
                    最后
                    {
                        如果(工作)
                        {
                            对话D =新的对话框(AddContact.this);
                            d.setTitle(成功);
                            TextView的电视=新的TextView(AddContact.this);
                            tv.setText(数据库修改成功了。);
                            d.setContentView(电视);
                            d.show();

                        }
                    }
            }
        });
    }
}
 

解决方案

下面是活动的样品code:

 公共类MainActivity延伸活动{
ListView控件的ListView;
公共静态最终字符串字段[] = {DatabaseSetup.colName};
光标光标;

@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.managecontacts);
    ListView的=(的ListView)findViewById(R.id.lstContacts);
    DatabaseSetup.init(本);
    对于(整数i = 0; I< 120; ++ I){
        DatabaseSetup.createEntry(名称+我,邮件+我,电话1+ I,
                电话2+我,地址+我,注意事项+ I);
    }
}

@覆盖
保护无效的onPause(){
    listView.setAdapter(空);
    cursor.close();
    DatabaseSetup.deactivate();
    super.onPause();
}

@覆盖
保护无效onResume(){
    super.onResume();
    DatabaseSetup.init(本);
    光标= DatabaseSetup.getContactNames();
    SimpleCursorAdapter适配器=新SimpleCursorAdapter(这一点,
            R.layout.row,光标,领域,新的INT [] {R.id.item_text});
    listView.setAdapter(适配器);
}

}
 

下面是DatabaseSetup样品code:

  / *
 * 用法:
 * DatabaseSetup.init(egActivityOrContext);
 * DatabaseSetup.createEntry()或DatabaseSetup.getContactNames()或DatabaseSetup.getDb()
 * DatabaseSetup.deactivate(),然后完成任务
 * /

类DatabaseSetup扩展SQLiteOpenHelper {
静态DatabaseSetup实例= NULL;
静态SQLiteDatabase DB = NULL;

公共静态无效的init(上下文的背景下){
    如果(空==实例){
        例如=新DatabaseSetup(上下文);
    }
}

公共静态SQLiteDatabase getDb(){
    如果(空== DB){
        DB = instance.getWritableDatabase();
    }
    返回分贝;
}

公共静态无效停用(){
    如果(空= DB&放大器;!&安培; db.isOpen()){
        db.close();
    }
    DB = NULL;
    例如= NULL;
}

公共静态长createEntry(字符串名称,字符串邮箱,字符串PHONE1,
        字符串PHONE2,地址字符串,字符串注释){
    ContentValues​​ CV =新ContentValues​​();
    cv.put(COLNAME,姓名);
    cv.put(colMail,邮件);
    cv.put(colPhone1,PHONE1);
    cv.put(colPhone2,PHONE2);
    cv.put(colAddress,地址);
    cv.put(colNotes,票据);
    返回getDb()插入(contactsTable,空,CV)。

}

公共静态光标getContactNames(){
    // TODO自动生成方法存根
    的String []列=新的String [] {_id,COLNAME};
    返回getDb()查询(contactsTable,列,NULL,NULL,NULL,NULL,
            空值);
}

私人DatabaseSetup(上下文的背景下){
    超(背景下,数据库名,空,dbVersion);
}

@覆盖
公共无效的onCreate(SQLiteDatabase DB){
    // TODO自动生成方法存根
    db.execSQL(CREATE TABLE IF NOT EXISTS+ contactsTable
            +(_id整数主键自动增量,+ COLNAME
            +TEXT NOT NULL,+ colMail +TEXT NOT NULL,+ colPhone1
            +TEXT NOT NULL,+ colPhone2 +TEXT NOT NULL,
            + colAddress +TEXT NOT NULL,+ colNotes
            +TEXT NOT NULL));

    db.execSQL(CREATE TABLE IF NOT EXISTS+ templatesTable
            +(_id整数主键自动增量,+ colSubject
            +TEXT NOT NULL,+ colBody +TEXT NOT NULL));

    db.execSQL(CREATE TABLE IF NOT EXISTS+ tagsTable
            +(_id整数主键自动增量,+ colTagName
            +TEXT NOT NULL,+ colContact +TEXT NOT NULL));

}

@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
    db.execSQL(DROP TABLE IF EXISTS+ contactsTable);
    db.execSQL(DROP TABLE IF EXISTS+ templatesTable);
    db.execSQL(DROP TABLE IF EXISTS+ tagsTable);
    的onCreate(DB);
}

静态最后弦乐DBNAME =数据库;
静态最终诠释dbVersion = 1;
静态最后弦乐contactsTable =联系人;
静态最后弦乐COLNAME =名称;
静态最后弦乐colMail =电子邮件;
静态最后弦乐colPhone1 =电话1;
静态最后弦乐colPhone2 =电话2;
静态最后弦乐colAddress =地址;
静态最后弦乐colNotes =注意事项;

静态最后弦乐templatesTable =模板;
静态最后弦乐colSubject =主题;
静态最后弦乐colBody =身体;

静态最后弦乐tagsTable =标签;
静态最后弦乐colTagName =名称;
静态最后弦乐colContact =联系;

}
 

下面是RES /设计/ row.xml

 < XML版本=1.0编码=UTF-8&GT?;
< TextView中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:ID =@ + ID / item_text
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT/>
 

希望它帮助。

Having followed several examples with no success, I find myself at a dead end on this issue. The issue I am encountering is how to fill a ListView with data from a database.

The purpose is to create a screen with the listView which displays only the name column from the database, then when the item is selected the application goes to a new screen where it displays the other data related to the item.

The things I'd like help with understanding are filling the ListView with data from just the "Name" column from my database table "Contacts" and then, getting the data from the row of the database based on the selected item.

Here is the code for the ContactsMenu class, where the names will be displayed.

package com.emailandcontactmanager;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class ContactsMenu extends Activity {


    ListView listView;
    public static final String fields[] = { DatabaseSetup.colName};
    Cursor cursor;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.managecontacts);
        listView = (ListView) findViewById(R.id.lstContacts); 
        DatabaseSetup.init(this); 

        Button btnAddItem = (Button) findViewById(R.id.btnAddContact);
        btnAddItem.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent addItem = new Intent(v.getContext(), AddContact.class);
            startActivity(addItem);
        }
        });
    }
        @Override
        protected void onPause() {
            listView.setAdapter(null);
            cursor.close();
            DatabaseSetup.deactivate();
            super.onPause();
        }

        @Override
        protected void onResume() {
            super.onResume();
            DatabaseSetup.init(this);
            cursor = DatabaseSetup.getContactNames();
            SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.row, cursor, fields, new int[] {R.id.item_text});
            listView.setAdapter(adapter); 
        }


    DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
            switch (which){ 
            case DialogInterface.BUTTON_POSITIVE: 
                finish();
                break; 

            case DialogInterface.BUTTON_NEGATIVE: 
                //Nothing happens on No button click, and the menu closes
                break; 
            } 
        } 
    }; 

    @Override
    public boolean onCreateOptionsMenu(Menu mainmenu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.mainmenu, mainmenu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        final CharSequence[] items = {"Contacts list", "Add Contact"};

        switch (item.getItemId()) {
            case R.id.help:     AlertDialog.Builder builder = new AlertDialog.Builder(this);
                                builder.setTitle("Select a function to revice information about it.");
                                builder.setItems(items, new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int selected) {
                                        switch(selected){
                                        case 0:
                                            Toast.makeText(getApplicationContext(),
                                                    "Allows you to view the selected item and make editations to it or delete it.",
                                                    Toast.LENGTH_LONG).show();
                                            break;
                                        case 1:
                                            Toast.makeText(getApplicationContext(),
                                                    "Allows you to add a new contact by bringing up a screen where the nececary information can be entered.",
                                                    Toast.LENGTH_LONG).show();
                                        }
                                    }
                                });
                                builder.show();
                                break;

                                case R.id.back:     AlertDialog.Builder builderBack = new AlertDialog.Builder(this); 
                                                    builderBack.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener) 
                                                    .setNegativeButton("No", dialogClickListener).show(); 
                                break;
        }
        return true;

    }
}

Database Setup Class

package com.emailandcontactmanager;

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

/* 
 * usage:  
 * DatabaseSetup.init(egActivityOrContext); 
 * DatabaseSetup.createEntry() or DatabaseSetup.getContactNames() or DatabaseSetup.getDb() 
 * DatabaseSetup.deactivate() then job done 
 */ 

class DatabaseSetup extends SQLiteOpenHelper { 
static DatabaseSetup instance = null; 
static SQLiteDatabase db = null; 

public static void init(Context context) { 
    if (null == instance) { 
        instance = new DatabaseSetup(context); 
        } 
    } 

public static SQLiteDatabase getDb() { 
    if (null == db) { 
        db = instance.getWritableDatabase(); 
        } 
    return db; 
    } 

public static void deactivate() { 
    if (null != db && db.isOpen()) { 
        db.close(); 
        } 
    db = null; 
    instance = null; 
    } 

public static long createEntry(String name, String mail, String phone1, 
        String phone2, String address, String notes) { 
    ContentValues cv = new ContentValues(); 
    cv.put(colName, name); 
    cv.put(colMail, mail); 
    cv.put(colPhone1, phone1); 
    cv.put(colPhone2, phone2); 
    cv.put(colAddress, address); 
    cv.put(colNotes, notes); 
    return getDb().insert(contactsTable, null, cv); 

    } 

public static Cursor getContactNames() { 
    // TODO Auto-generated method stub 
    String[] columns = new String[] {"_id", colName }; 
    return getDb().query(contactsTable, columns, null, null, null, null, 
            null); 
    } 

DatabaseSetup(Context context) { 
    super(context, dbName, null, dbVersion); 
    } 

@Override 
public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    db.execSQL("CREATE TABLE IF NOT EXISTS " + contactsTable 
            + " (_id integer primary key autoincrement, " + colName 
            + " TEXT NOT NULL, " + colMail + " TEXT NOT NULL, " + colPhone1 
            + " TEXT NOT NULL, " + colPhone2 + " TEXT NOT NULL, " 
            + colAddress + " TEXT NOT NULL, " + colNotes 
            + " TEXT NOT NULL)"); 

    db.execSQL("CREATE TABLE IF NOT EXISTS " + templatesTable 
            + " (_id integer primary key autoincrement, " + colSubject 
            + " TEXT NOT NULL, " + colBody + " TEXT NOT NULL)"); 

    db.execSQL("CREATE TABLE IF NOT EXISTS " + tagsTable 
            + " (_id integer primary key autoincrement, " + colTagName 
            + " TEXT NOT NULL, " + colContact + " TEXT NOT NULL)"); 

    } 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + contactsTable); 
    db.execSQL("DROP TABLE IF EXISTS " + templatesTable); 
    db.execSQL("DROP TABLE IF EXISTS " + tagsTable); 
    onCreate(db); 
    } 

static final String dbName = "DB"; 
static final int dbVersion = 1; 
static final String contactsTable = "Contacts"; 
static final String colName = "Name"; 
static final String colMail = "Email"; 
static final String colPhone1 = "Phone1"; 
static final String colPhone2 = "Phone2"; 
static final String colAddress = "Address"; 
static final String colNotes = "Notes"; 

static final String templatesTable = "Templates"; 
static final String colSubject = "Subject"; 
static final String colBody = "Body"; 

static final String tagsTable = "Tags"; 
static final String colTagName = "Name"; 
static final String colContact = "Contact"; 

} 

The code for the class to add to the contact menu. It used to work when I had a temporary display, however, now it does not.

package com.emailandcontactmanager;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AddContact extends Activity
{

    Button saveContact;
    EditText contactName, contactMail, contactPhone1, contactPhone2, contactAddress, contactNotes; 

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.newcontact);


        contactName = (EditText) findViewById(R.id.txtName);
        contactMail = (EditText) findViewById(R.id.txtMail);
        contactPhone1 = (EditText) findViewById(R.id.txtPhone1);
        contactPhone2 = (EditText) findViewById(R.id.txtPhone2);
        contactAddress = (EditText) findViewById(R.id.txtAddress);
        contactNotes = (EditText) findViewById(R.id.txtNotes);
       // saveContact = (Button) findViewById(R.id.btnSaveContact);

        Button btnSaveContact = (Button) findViewById(R.id.btnSaveContact);
        btnSaveContact.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                boolean working = true;

                try{
                    String name = contactName.getText().toString();
                    String mail = contactMail.getText().toString();
                    String phone1 = contactPhone1.getText().toString();
                    String phone2 = contactPhone2.getText().toString();
                    String address = contactAddress.getText().toString();
                    String notes = contactNotes.getText().toString();

                    DatabaseSetup entry = new DatabaseSetup(AddContact.this);
                    DatabaseSetup.getDb();
                    DatabaseSetup.createEntry(name, mail, phone1, phone2, address, notes);
                    entry.close();

                    }
                    catch(Exception e)
                    {
                        working = false;
                        String error = e.toString();
                        Dialog d = new Dialog(AddContact.this);
                        d.setTitle("Error");
                        TextView tv = new TextView(AddContact.this);
                        tv.setText(error);
                    }
                    finally
                    {
                        if(working)
                        {
                            Dialog d = new Dialog(AddContact.this);
                            d.setTitle("Success");
                            TextView tv = new TextView(AddContact.this);
                            tv.setText("The database changes have succeeded.");
                            d.setContentView(tv);
                            d.show();

                        }
                    }       
            }   
        });
    }
}

解决方案

Here is Activity sample code:

public class MainActivity extends Activity {
ListView listView;
public static final String fields[] = { DatabaseSetup.colName };
Cursor cursor;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.managecontacts);
    listView = (ListView) findViewById(R.id.lstContacts);
    DatabaseSetup.init(this);
    for (Integer i = 0; i < 120; ++i) {
        DatabaseSetup.createEntry("Name " + i, "Mail " + i, "Phone1 " + i,
                "Phone2 " + i, "Address " + i, "Notes " + i);
    }
}

@Override
protected void onPause() {
    listView.setAdapter(null);
    cursor.close();
    DatabaseSetup.deactivate();
    super.onPause();
}

@Override
protected void onResume() {
    super.onResume();
    DatabaseSetup.init(this);
    cursor = DatabaseSetup.getContactNames();
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
            R.layout.row, cursor, fields, new int[] { R.id.item_text });
    listView.setAdapter(adapter);
}

}

Here is DatabaseSetup sample code:

/*
 * usage: 
 * DatabaseSetup.init(egActivityOrContext);
 * DatabaseSetup.createEntry() or DatabaseSetup.getContactNames() or DatabaseSetup.getDb()
 * DatabaseSetup.deactivate() then job done
 */

class DatabaseSetup extends SQLiteOpenHelper {
static DatabaseSetup instance = null;
static SQLiteDatabase db = null;

public static void init(Context context) {
    if (null == instance) {
        instance = new DatabaseSetup(context);
    }
}

public static SQLiteDatabase getDb() {
    if (null == db) {
        db = instance.getWritableDatabase();
    }
    return db;
}

public static void deactivate() {
    if (null != db && db.isOpen()) {
        db.close();
    }
    db = null;
    instance = null;
}

public static long createEntry(String name, String mail, String phone1,
        String phone2, String address, String notes) {
    ContentValues cv = new ContentValues();
    cv.put(colName, name);
    cv.put(colMail, mail);
    cv.put(colPhone1, phone1);
    cv.put(colPhone2, phone2);
    cv.put(colAddress, address);
    cv.put(colNotes, notes);
    return getDb().insert(contactsTable, null, cv);

}

public static Cursor getContactNames() {
    // TODO Auto-generated method stub
    String[] columns = new String[] { "_id", colName };
    return getDb().query(contactsTable, columns, null, null, null, null,
            null);
}

private DatabaseSetup(Context context) {
    super(context, dbName, null, dbVersion);
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    db.execSQL("CREATE TABLE IF NOT EXISTS " + contactsTable
            + " (_id integer primary key autoincrement, " + colName
            + " TEXT NOT NULL, " + colMail + " TEXT NOT NULL, " + colPhone1
            + " TEXT NOT NULL, " + colPhone2 + " TEXT NOT NULL, "
            + colAddress + " TEXT NOT NULL, " + colNotes
            + " TEXT NOT NULL)");

    db.execSQL("CREATE TABLE IF NOT EXISTS " + templatesTable
            + " (_id integer primary key autoincrement, " + colSubject
            + " TEXT NOT NULL, " + colBody + " TEXT NOT NULL)");

    db.execSQL("CREATE TABLE IF NOT EXISTS " + tagsTable
            + " (_id integer primary key autoincrement, " + colTagName
            + " TEXT NOT NULL, " + colContact + " TEXT NOT NULL)");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + contactsTable);
    db.execSQL("DROP TABLE IF EXISTS " + templatesTable);
    db.execSQL("DROP TABLE IF EXISTS " + tagsTable);
    onCreate(db);
}

static final String dbName = "DB";
static final int dbVersion = 1;
static final String contactsTable = "Contacts";
static final String colName = "Name";
static final String colMail = "Email";
static final String colPhone1 = "Phone1";
static final String colPhone2 = "Phone2";
static final String colAddress = "Address";
static final String colNotes = "Notes";

static final String templatesTable = "Templates";
static final String colSubject = "Subject";
static final String colBody = "Body";

static final String tagsTable = "Tags";
static final String colTagName = "Name";
static final String colContact = "Contact";

}

Here is 'res/layout/row.xml'

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

Hope it helps.