2013-02-28 5 views
0

это мой код базы данных, и я хочу получить имя из своей базы данных и показать его в списке, который в другом java-файле, опубликованном ниже как profilelist.jar .but im not can it it plz tell me правильно ли этот код?показать данные из базы данных в listview

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 выше

плз мне помочь им плохо застрял здесь @Override общественного недействительными onItemClick (AdapterView arg0, Просмотр arg1, внутр арг2, длинные arg3) { // TODO Auto-генерироваться метод STUB

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


} 
+0

Возможный дубликат [Наполнение ListView из базы данных SQLite] (http://stackoverflow.com/questions/8656901/populating-a-listview-from- a-sqlite-database) –

ответ

0

Недавно я реализовал этот тип функции. В основном вам нужно создать пользовательский BaseAdapter, чтобы отображать ваши данные в ListView. В конструкторе адаптера вы передаете в свой массив объектов, содержащих ваши данные. Учебник, который я когда-то собирался, был: http://www.vogella.com/articles/AndroidListView/article.html. Надеюсь это поможет!

+0

нормально, но я хочу знать, что это остальная часть кода в порядке? – Saurabh

+0

От взгляда на него все выглядит так, как будто оно должно работать, но вы должны создать объект, чтобы связать ваш контакт. Это облегчит получение данных в адаптере. Просто создайте класс Contact, Person и т. Д. С помощью простых полей/геттеров/сеттеров для таких вещей, как имя, номер, DOB и т. Д. Затем в вашем адаптере вы можете пройти в ArrayList . Наконец, в вашей части getView вы можете сделать что-то вроде myTextView.setText (contacts.get (position)) и т. Д. Для заполнения данных в ListView. – BKW

+0

Это не сработает: он делает доступ к файлу из потока пользовательского интерфейса. –

0

Чтобы ответить на оба ваших первого и второго вопроса: «нет, этот код действительно не в порядке». Вы действительно должны посмотреть на загрузчик. Хотя то, что вы написали, может работать большую часть времени, вы очень рискуете создать приложение, не отвечающее на ошибки, которые внезапно прекратят ваше приложение. Не делайте этого в потоке пользовательского интерфейса.

Существует много программ для Android, которые могут быть удивительными. Я действительно предлагаю вам подобрать одну из стандартных книг о том, как это сделать, прежде чем рисовать себя в угол.

+0

yes u r right Я столкнулся с неожиданно остановившейся ошибкой операции во время запуска приложения. – Saurabh

+0

Мысль так. Прежде чем продолжить, прочитайте предложения от меня (Loader) и Berdon (SimpleCursorAdaptor). –

0

Вы хотите использовать CursorAdapter, например this SimpleCursorAdapter. Вы передаете ему сопоставление столбцов для просмотра идентификаторов и привязки дескриптора и т. Д.

0

Вам необходимо создать SimpleCursorAdapter и прикрепить его к курсору, возвращаемому из пользовательского выбора запроса базы данных. Затем столбцы данных, возвращаемые с помощью курсора, отображаются на ваш пользовательский вид для отображения. Чтобы узнать больше НажмитеHere это дает надлежащую реализацию вашей проблемы

Смежные вопросы