2013-02-28 179 views
0

這是我的數據庫代碼,我想從我的數據庫檢索名稱,並顯示它在另一個Java文件下面列出的另一個java文件profilelist.jar。但我不能做到PLZ告訴我這個代碼是否正確?在數據庫中顯示數據在列表視圖

package a.vaccination; 

import android.annotation.TargetApi; 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.os.Build; 
import android.util.Log; 

@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
public class datahandler { 

    public static final String KEY_ROWID = "id"; 
    public static final String KEY_name = "name"; 
    public static final String KEY_dob = "dob"; 
    public static final String KEY_contact = "contact"; 
    public static final String KEY_email = "email"; 
    private static final String TAG = "DBAdapter"; 

    private static final String DATABASE_NAME = "profile"; 
    private static final String DATABASE_TABLE = "baby"; 
    private static final int DATABASE_VERSION = 2; 

    private static final String DATABASE_CREATE = "create table if not exists" 
      + DATABASE_TABLE 
      + "(id integer primary key autoincrement, " 
      + "name VARCHAR not null, dob date, contact VARCHAR, email 
VARCHAR);"; 
    private final Context context; 

    private DatabaseHelper DBHelper; 
    private SQLiteDatabase db; 

    public datahandler(Context ctx) { 
     this.context = ctx; 
     DBHelper = new DatabaseHelper(context); 
    } 

    protected static class DatabaseHelper extends SQLiteOpenHelper { 
     DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      // TODO Auto-generated method stub 
      try { 
       db.execSQL(DATABASE_CREATE); 
       // db = DBHelper.getWritableDatabase(); 
       Log.i(DATABASE_NAME, "create"); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      // TODO Auto-generated method stub 
      Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old 
data"); 
      db.execSQL("DROP TABLE IF EXISTS contacts"); 
      onCreate(db); 
     } 
    } 

    // ---opens the database--- 
    public datahandler open() throws SQLException { 
     db = DBHelper.getWritableDatabase(); 
     return this; 
    } 

    // ---closes the database--- 
    public void close() { 
     DBHelper.close(); 
    } 

    // ---insert a record into the database--- 
    public long insertRecord(String name, String dob, String contact, 
      String email) { 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(KEY_name, name); 
     initialValues.put(KEY_dob, dob); 
     initialValues.put(KEY_contact, contact); 
     initialValues.put(KEY_email, email); 
     Log.i(DATABASE_NAME, "values added"); 
     return db.insert(DATABASE_TABLE, null, initialValues); 

    } 

    // ---updates a record--- 
    public boolean updateRecord(long rowId, String name, String dob, 
      String contact, String email) { 
     ContentValues args = new ContentValues(); 
     args.put(KEY_name, name); 
     args.put(KEY_dob, dob); 
     args.put(KEY_contact, contact); 
     args.put(KEY_email, email); 
     return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; 
    } 

    public Cursor getAllTitles() { 
     return db.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_name, 
       KEY_dob, KEY_contact, KEY_email }, null, null, null, null, 
       null, null); 
    } 

    // ---retrieves a particular title--- 

    public Cursor getTitle(long rowId) throws SQLException { 
     Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] { 
       KEY_ROWID, KEY_name, KEY_email, KEY_dob, KEY_contact }, 
       KEY_ROWID + "=" + rowId, null, null, null, null, null, 
null); 
     if (mCursor != null) { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 
    } 

    public void getReadableDatabase() { 
     // TODO Auto-generated method stub 
     Cursor cur = db 
       .rawQuery("select rowid _id,* from DATABASE_TABLE", null); 
    } 
} 

profilelist.java

package a.vaccination; 

import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.support.v4.widget.SimpleCursorAdapter; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 

//this shows profies of baby and option of add new one 
public class profilelist extends Activity implements OnItemClickListener { 

    datahandler db = new datahandler(this); 
    SimpleCursorAdapter adapter = null; 
    Cursor c; 

    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.child); 

     Button add = (Button) findViewById(R.id.button1); 
     add.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // navigate to create profile 
       Intent it = new Intent(profilelist.this, 
createprofile.class); 
       startActivity(it); 

      } 
     }); 


     db.open(); 
     Cursor c = db.getAllTitles(); 
     if (c.moveToFirst()) { 
      do { 
       DisplayRecord(c); 
      } while (c.moveToNext()); 
     } 
     db.close(); 

     // ---get a Record--- 
     db.open(); 
     c = db.getTitle(2); 
     if (c.moveToFirst()) 
      DisplayRecord(c); 
     else 
      Toast.makeText(this, "No Assignments found", Toast.LENGTH_LONG) 
        .show(); 
     db.close(); 

    } 

    public void DisplayRecord(Cursor c) { 
     // TODO Auto-generated method stub 
     Toast.makeText(
       this, 
       "id: " + c.getString(0) + "\n" + "name: " + c.getString(1) 
         + "\n" + " dob: " + c.getString(2) + 
"contact" 
         + c.getString(3) + "email" + 
c.getString(4), 

       Toast.LENGTH_SHORT).show(); 
     String[] columns = new String[] { datahandler.KEY_name }; 
     int[] to = new int[] { R.id.name }; 
     adapter = new SimpleCursorAdapter(this, R.layout.child, c, columns, 
       to, 0); 
     ListView names = (ListView) findViewById(R.id.listView1); 
     names.setAdapter(adapter); 
     names.setOnItemClickListener(this); 

    } 

我在 a.vaccination.datahandler.getTitle(datahandler.java:115) 和 了對錯誤的a.vaccination.profilelist.onCreate(ProfileList文件的.java:67) java.lang.NoSuchMethodError:android.database.sqlite.SQLiteDatabaseb.query 我提供既profilelist.java和datahandler.java以上

plz幫助我的IM嚴重這裏 @覆蓋卡住 公共無效onItemClick(適配器視圖爲arg0,ARG1觀,詮釋ARG2,長ARG3){// TODO自動生成方法存根

 Intent i = new Intent(profilelist.this, vaccination.class); 
     startActivity(i); 
    } 


} 
+0

可能重複的[從SQLite數據庫填充列表視圖](http://stackoverflow.com/questions/8656901/populating-a-listview-from- a-sqlite-database) – 2017-03-30 05:15:55

回答

0

最近我實現了這個類型的功能。基本上你必須創建一個自定義的BaseAdapter來在ListView中顯示你的數據。在適配器構造函數中,傳入包含數據的對象數組。我曾經習慣的教程是: http://www.vogella.com/articles/AndroidListView/article.html。希望這可以幫助!

+0

好的,但我想知道這是代碼的其餘部分罰款? – Saurabh 2013-02-28 17:40:16

+0

通過查看它看起來應該可以工作,但您應該創建一個對象來包裝您的聯繫人。這將使得將數據傳輸到適配器變得更加容易。只需創建一個名爲Contact,Person等的類,使用簡單的字段/ getters/setter來設置名稱,數字,DOB等等。然後,在您的適配器中,您可以傳入ArrayList 。最後在你的getView部分中,你可以做一些像myTextView.setText(contacts.get(position))等等來填充ListView中的數據。 – BKW 2013-02-28 18:57:10

+0

它不會工作:它正在從UI線程進行文件訪問。 – 2013-03-01 15:12:23

0

要回答你的第一個和第二個問題:「不,這個代碼真的不好。」你真的必須看着使用加載程序。雖然你寫的東西大部分時間都可以工作,但是你很可能會產生應用程序無響應錯誤,這些錯誤會突然終止你的應用程序。不要在UI線程上做這些事情。

有很多Android編程可能令人驚訝。我真的建議你在繪製自己的角落之前拿起關於如何去做的標準書籍之一。

+0

是的,我正確的我在運行應用程序期間遇到意外停止操作錯誤。 – Saurabh 2013-02-28 19:12:54

+0

這樣想。在繼續之前,請閱讀我(Loader)和Berdon(SimpleCursorAdaptor)的建議。 – 2013-02-28 19:15:58

0

你想使用一個CursorAdapter像this SimpleCursorAdapter。您將它傳遞給列的映射以查看ID和處理綁定等。

0

您需要創建SimpleCursorAdapter並將其附加到從數據庫自定義查詢選擇中返回的遊標。然後將光標返回的數據列映射到您的自定義視圖以供顯示。要知道更多點擊Here這給你的問題的正確實施

相關問題