数据库条目未显示在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;
}