gpt4 book ai didi

android - 安卓 : Fill ListView with database

转载 作者:搜寻专家 更新时间:2023-11-01 09:05:04 25 4
gpt4 key购买 nike

在遵循了几个没有成功的例子之后,我发现自己在这个问题上陷入了死胡同。我遇到的问题是如何用数据库中的数据填充 ListView

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.

我想帮助理解的事情是用我的数据库表“Contacts”中的“Name”列中的数据填充 ListView,然后从基于所选项目的数据库。

这是 ContactsMenu 类的代码,其中将显示姓名。

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;

}
}

数据库设置类

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

}

添加到联系人菜单的类的代码。当我有一个临时显示器时它曾经工作,但是现在它不工作了。

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

}
}
}
});
}
}

最佳答案

这是 Activity 示例代码:

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

}

这是 DatabaseSetup 示例代码:

/*
* 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";

}

这里是'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" />

希望对您有所帮助。

关于android - 安卓 : Fill ListView with database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12566763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com