数据库条目未显示在listview Android中
我已经创建了一个数据库和列表。我现在有一个文本框和按钮,下面有列表。单击按钮后输入项目时,该项目将显示在列表中。但是,当退出应用程序并重新输入之前输入的值时,这些值将不再显示在列表中 这是列表代码:数据库条目未显示在listview Android中,android,database,android-listview,android-sqlite,Android,Database,Android Listview,Android Sqlite,我已经创建了一个数据库和列表。我现在有一个文本框和按钮,下面有列表。单击按钮后输入项目时,该项目将显示在列表中。但是,当退出应用程序并重新输入之前输入的值时,这些值将不再显示在列表中 这是列表代码: package bookshelf.Android.Java; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import andr
package bookshelf.Android.Java;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import bookshelf.Android.Java.R;
public class Own extends Activity
{
private EditText item;
private ListView lv;
private Toast toast;
private Button addButton;
ArrayList<String> items;
ArrayAdapter<String> listad;
List<String> books;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.own);
CharSequence text = "Item added!";
toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
setUpView();
}
private void setUpView()
{
item = (EditText)this.findViewById(R.id.txtAmount);
lv = (ListView)this.findViewById(R.id.listView1);
addButton = (Button)this.findViewById(R.id.Add);
items = new ArrayList<String>();
items.clear();
final DataBaseOwn dbo = new DataBaseOwn(Own.this);
listad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);//need to create a way to get items to equal books
lv.setAdapter(listad);
addButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
addItemList();
books = dbo.get(items);
toast.show();
}
});
item.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event)
{
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_ENTER)
{
addItemList();
}
return true;
}
});
}
protected void addItemList()
{
// TODO Auto-generated method stub
// TODO Auto-generated method stub
if (isInputValid(item))
{
items.add(0,item.getText().toString());
item.setText("");
listad.notifyDataSetChanged();
}
}
protected boolean isInputValid(EditText item2)
{
// TODO Auto-generatd method stub
if (item2.getText().toString().trim().length()<1)
{
item2.setError("Please Enter Item");
return false;
}
else
{
return true;
}
}
}
包bookshelf.Android.Java;
导入java.util.ArrayList;
导入java.util.List;
导入android.app.Activity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.KeyEvent;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.Toast;
导入bookshelf.Android.Java.R;
公共类自身扩展活动
{
专用编辑文本项;
私有ListView lv;
私人吐司;
私人按钮添加按钮;
数组列表项;
ArrayAdapter listad;
列出书籍;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.own);
CharSequence text=“已添加项!”;
toast=toast.makeText(getApplicationContext(),text,toast.LENGTH\u SHORT);
setUpView();
}
私有void setUpView()
{
item=(EditText)this.findViewById(R.id.txtAmount);
lv=(ListView)this.findViewById(R.id.listView1);
addButton=(Button)this.findViewById(R.id.Add);
items=newarraylist();
items.clear();
final DataBaseOwn dbo=新的DataBaseOwn(Own.this);
listad=new ArrayAdapter(这个,android.R.layout.simple_list_item_1,items);//需要创建一种方法使项目与书籍相等
lv.设置适配器(listad);
addButton.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v)
{
addItemList();
books=dbo.get(项目);
toast.show();
}
});
item.setOnKeyListener(新视图.OnKeyListener(){
公共布尔onKey(视图v、int keyCode、KeyEvent事件)
{
//TODO自动生成的方法存根
if(keyCode==KeyEvent.keyCode\u输入)
{
addItemList();
}
返回true;
}
});
}
受保护的void addItemList()
{
//TODO自动生成的方法存根
//TODO自动生成的方法存根
如果(输入有效(项目))
{
添加(0,item.getText().toString());
项目.setText(“”);
notifyDataSetChanged();
}
}
受保护的布尔值isInputValid(EditText项2)
{
//TODO自动生成方法存根
如果(item2.getText().toString().trim().length()在创建ArrayAdapter时,您的列表<代码>项
是emtpy。您需要用已插入数据库的所有项填充列表
final DataBaseOwn dbo = new DataBaseOwn(Own.this);
items = new ArrayList<String>();
//fill the list with all items from the database
items = dbo.get();
listad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
lv.setAdapter(listad);
public List<String> get() {
db = this.getWritableDatabase();
String column = new String[] { BOOK };
Cursor c = db.query(TABLE_NAME, column, null, null, null, null, null);
List<String> result = new ArrayList<String>();
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
result.add(c.getString(0));
}
cursor.close();
return result;
}
更新:
db.insert(item)
在您的活动中从未调用过。因此,这些项只会添加到listview中,而不会插入到您的数据库中。从onClick()
中删除books=db.get();
行,然后将这行dbo.insert(item.getText().toString()
添加到addItemList()中
我做了您建议的更改,但我仍然没有从数据库中获取值。好的,我看到它从未被调用,现在正在调用Insert。不幸的是,现在我得到了一个空指针错误,我不知道为什么。我在问题中发布了错误,因为它不允许我在这里。10-17 07:09:15.274:E/AndroidRun时间(3118):致命异常:main 10-17 07:09:15.274:E/AndroidRuntime(3118):java.lang.nullpointer异常10-17 07:09:15.274:E/AndroidRuntime(3118):at bookshelf.Android.java.DataBaseOwn.Insert(DataBaseOwn.java:52)10-17 07:09:15.274:E/AndroidRuntime(3118):at bookshelf.Android.java.Own.addItemList(Own.java:86)10-17 07:09:15.274:E/AndroidRuntime(3118):在android.view.view$PerformClick.run(view.java:14105)10-17 07:09:15.274:E/AndroidRuntime(3118):在android.os.Handler.handleCallback(Handler.java:605)10-17 07:09:15.274:E/AndroidRuntime(3118):在android.os.Handler.dispatchMessage(Handler.java:92)10-17 07:09:15.274:E/AndroidRuntime(3118):在android.os.Looper.loop(Looper.java:137)10-17 07:09:15.274:E/AndroidRuntime(3118):在android.app.ActivityThread.main(ActivityThread.java:4424)10-17 07:09:15.274:E/AndroidRuntime(3118):在java.lang.reflect.Method.invokenactive(本机方法)10-17 07:09:15.274:E/AndroidRuntime(3118):在java.lang.reflect.Method.java:511)10-17 07:09:15.274:E/AndroidRuntime(3118):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)10-17 07:09:15.274:E/AndroidRuntime(3118):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)10-17 07:09:15.274:E/AndroidRuntime(3118):在dalvik.system.NativeStart.main(本机方法)
final DataBaseOwn dbo = new DataBaseOwn(Own.this);
items = new ArrayList<String>();
//fill the list with all items from the database
items = dbo.get();
listad = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
lv.setAdapter(listad);
public List<String> get() {
db = this.getWritableDatabase();
String column = new String[] { BOOK };
Cursor c = db.query(TABLE_NAME, column, null, null, null, null, null);
List<String> result = new ArrayList<String>();
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
result.add(c.getString(0));
}
cursor.close();
return result;
}