2013-02-15 71 views
1

我想从数据库检索数据到我的ListView,但无法这样做。 我的java文件的名称为相应的activity_view_list.xml布局是ViewList.java。 那么请在这种情况下帮助我。 下面是我的代码无法从sqlite数据库检索值到ListView

DBHelper.java

package com.example.shoppinglist; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class DBHelper extends SQLiteOpenHelper 
{ 

    private static final String DATABASE_NAME = "ShoppingDatabase"; 
    private static final int DATABASE_VERSION = 1; 
    private static final String DATBASE_CREATE = "CREATE TABLE ShoppingList(Id integer primary key autoincrement not null," + 
      "List_name varchar(255) default null,List_status varchar(255) default 'OPEN'," + 
      "date datetime)"; 
    public DBHelper(Context context, String name, CursorFactory factory, 
      int version) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 

    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL(DATBASE_CREATE); 

    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     Log.w(DBHelper.class.getName(), 
       "Upgrading database from version " + oldVersion + " to " 
    + newVersion + ", which will delete the old data."); 
    db.execSQL("DROP TABLE IF EXISTS ShoppingList"); 
    //Method is called during creation of new database 
    onCreate(db); 
    } 
} 

DBAdpater.java

package com.example.shoppinglist; 

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

public class DBAdapter 
{ 
    private Context ctxt; 
    private SQLiteDatabase db; 
    private DBHelper dbHelper; 
    public static final String KEY_ROWID = "Id"; 
    public static final String KEY_NAME = "List_name"; 
    public static final String KEY_STATUS = "List_status"; 
    public static final String KEY_DATE = "date"; 
    //public static final String KEY_TOTAL_ITEMS = "Total_items"; 
    private static final String DATABASE_TABLE = "ShoppingList"; 

    public DBAdapter(Context ctxt) 
    { 
     this.ctxt = ctxt; 
    } 

    //Open database 
    public DBAdapter open() throws SQLException 
    { 
     dbHelper = new DBHelper(ctxt, null, null, 0); 
     db = dbHelper.getWritableDatabase(); 
     return this; 
    } 

    //Close database 
    public void close() 
    { 
     dbHelper.close(); 
    } 

    //Create a new item 
    public long insertItem(String list_name , String list_status, String date) 
    { 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(KEY_NAME, list_name); 
     initialValues.put(KEY_STATUS, list_status); 
     initialValues.put(KEY_DATE, date); 
     return db.insert(DATABASE_TABLE, null, initialValues); 
    } 

    //update a item 
    /*public boolean updateItem(long rowId, String list_name, 
     String list_status, String date) 
    { 
     ContentValues updateValues = new ContentValues(); 
     updateValues.put(KEY_NAME, list_name); 
     updateValues.put(KEY_STATUS, list_status); 
     updateValues.put(KEY_DATE, date); 
     return db.update(DATABASE_TABLE, updateValues, KEY_ROWID + "=" + rowId, 
       null) > 0;  
    }*/ 

    //delete a item 
    public boolean deleteItem(long rowId) 
    { 
     return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
    } 

    //return cursor over the list of all items in the database 
    public Cursor fetchAllItems(){ 
     return db.query(DATABASE_TABLE, new String[]{KEY_ROWID, KEY_NAME, 
           KEY_STATUS, KEY_DATE}, 
         null, null, null, null, null); 
    } 

    //return a cursor positioned at the defined item 
    public Cursor fetchItem(long rowId) throws SQLException{ 
     Cursor mCursor = db.query(true, DATABASE_TABLE, 
       new String[]{KEY_ROWID, KEY_NAME, KEY_STATUS, 
     KEY_DATE}, KEY_ROWID + "=" + rowId, null, null, null, null, null); 
     if(mCursor != null){ 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 
    } 
} 

activity_view_list.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".ViewList" > 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" > 
    </ListView> 

</RelativeLayout> 

ViewList.java

package com.example.shoppinglist; 
import android.os.Build; 
import android.os.Bundle; 
import android.annotation.TargetApi; 
import android.app.ListActivity; 
import android.database.Cursor; 
import android.view.Menu; 
import android.view.TextureView; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.Toast; 


public class ViewList extends ListActivity { 

    private DBAdapter dbadpater; 
    protected ListAdapter adapter; 
    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_view_list); 
     ListView listview = (ListView)findViewById(R.id.listView1); 
     dbadpater = new DBAdapter(ViewList.this); 
     dbadpater.open(); 
     Cursor values = dbadpater.fetchAllItems(); 
     adapter = new SimpleCursorAdapter(this, R.layout.list_example, values, new String[] {"Id","List_name"}, new int [] {R.id.txtid,R.id.txtname}); 
     setListAdapter(adapter); 
     listview.setOnItemClickListener(new OnItemClickListener() { 

      @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, 
        long id) { 
       // TODO Auto-generated method stub 
       Toast.makeText(getApplicationContext(), ((TextureView)view).getTextAlignment(),Toast.LENGTH_LONG).show(); 
      } 
     }); 
     dbadpater.close(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_view_list, menu); 
     return true; 
    } 

} 
+1

什么是你的错误 – Sree 2013-02-15 04:44:32

+0

@Sreekanthss无法填充到ListView中 我是新来的Android得到光标对象数据请帮助我用这个 – Aditya 2013-02-15 05:00:04

+0

尝试做简单的列表视图首先你可以看看这个教程http://www.androidhive.info/category/list-view/page/4/本教程包含许多形式的listview。那么你在数据库中创建一个行列表阵列,然后你上传列表项。 – 2013-02-15 05:19:33

回答

0

阅读tutorial for Loaders并使用SimpleCursorAdapter使用Loaders填充您的列表。 这是非常容易和有效的。装载机自己处理开放,关闭和刷新Cursor

0

您忘记将适配器设置为您的列表视图。 试试如下:

listView.setAdapter(adapter); 
0

使用

if (cursor.moveToFirst()) { 
     do { 
     // looping through all rows and here we adding to list 
     } while (cursor.moveToNext()); 
    }