2014-04-29 3 views
2

Я пытаюсь показать все мои данные из моей базы данных в ListViewпоказывают данные из базы данных в ListView Android

кода для создания базы данных:

DataHander.java

package com.example.testingforstack; 

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; 

public class DataHandler { 
    public static final String NAME = "name"; 
    public static final String EMAIL = "email"; 
    public static final String TABLE_NAME = "mytable"; 
    public static final String DATA_BASE_NAME = "mydatabase"; 
    public static final int DATABASE_VERSION = 1; 
    public static final String TABLE_CREATE = "create table mytable (name text not null, email text not null);"; 

    DataBaseHelper dbhelper; 
    Context ctx; 
    SQLiteDatabase db; 

    public DataHandler(Context ctx){ 
     this.ctx = ctx; 
     dbhelper = new DataBaseHelper(ctx); 
    } 

    public static class DataBaseHelper extends SQLiteOpenHelper{ 

     public DataBaseHelper(Context ctx) { 
      super(ctx, DATA_BASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db){ 
      try{ 
       db.execSQL(TABLE_CREATE); 
      }catch (SQLException e){ 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 
      //db.execSQL("DROP TABLE IF EXISTS mytable"); 
      onCreate(db); 
     } 
    } 

    public DataHandler open(){ 
     db = dbhelper.getReadableDatabase(); 
     return this; 
    } 

    public void close(){ 
     dbhelper.close(); 
    } 

    public long insertData(String name, String email){ 
     ContentValues content = new ContentValues(); 
     content.put(NAME, name); 
     content.put(EMAIL, email); 
     return db.insertOrThrow(TABLE_NAME, null, content); 
    } 

    public Cursor returnData(){ 
     return db.query(TABLE_NAME, new String[] {NAME, EMAIL}, null, null, null, null, null); 
    } 

} 

mainActivity.java

package com.example.testingforstack; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    Button save, load; 
    EditText name, email; 
    DataHandler handler; 
    String getName, getEmail; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     save = (Button) findViewById(R.id.save); 
     load = (Button) findViewById(R.id.load); 
     name = (EditText) findViewById(R.id.name); 
     email = (EditText) findViewById(R.id.email); 

     save.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       String getName = name.getText().toString(); 
       String getEmail = email.getText().toString(); 

       handler = new DataHandler(getBaseContext()); 
       handler.open(); 
       long id = handler.insertData(getName, getEmail); 
       insertSuccess(); 
       //Toast.makeText(getBaseContext(), "Data inserted", Toast.LENGTH_LONG).show(); 
       handler.close(); 
      } 
     }); 

     load.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       getName = ""; 
       getEmail = ""; 
       handler = new DataHandler(getBaseContext()); 
       handler.open(); 
       Cursor C = handler.returnData(); 
       if(C.moveToFirst()){ 
        do{ 
         getName = C.getString(0); 
         getEmail = C.getString(1); 
        }while(C.moveToNext()); 
       } 
       handler.close(); 
       loadSuccess(); 
       //Toast.makeText(getBaseContext(), "Name: "+getName+", Email: "+getEmail, Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 

    public void insertSuccess() 
    { 
     AlertDialog.Builder insertData = new AlertDialog.Builder(this); 

     insertData.setTitle("Info"); 
     insertData.setMessage("Data Inserted"); 
     insertData.setNegativeButton("OK", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface arg0, int value) { 
       // TODO Auto-generated method stub 
       arg0.dismiss(); 
      } 
     }); 
     insertData.show(); 
    } 

    public void loadSuccess() 
    { 
     AlertDialog.Builder loadData = new AlertDialog.Builder(this); 

     loadData.setTitle("Info"); 
     loadData.setMessage("Name: "+getName+" & your email: "+getEmail); 
     loadData.setNegativeButton("OK", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface arg0, int value) { 
       // TODO Auto-generated method stub 
       arg0.dismiss(); 
      } 
     }); 
     loadData.show(); 
    } 

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

} 

у меня есть две кнопки save и load. Я успешно выполнил кнопку сохранения, чтобы сохранить имя пользователя и адрес электронной почты. Однако я не знаю, как загрузить данные в список. Как это сделать?

+0

У вас есть список вещей, которые нужно показывать при нажатии на загрузку? Если это просто имя и адрес электронной почты, было бы проще отобразить в текстовом виде, верно? Если вы все еще хотите использовать представление списка, вам нужно будет определить представление списка в вашем макете и построить список из результата курсора db, приложите этот результат к списку с помощью адаптера. – prabugp

+0

@prabugp да, мне нужно показать его в listview, я создал макет listview, но я действительно не знаю, как получить данные из базы данных в моем списке – user3553370

ответ

2

В списках вы можете использовать различные типы адаптеров. Для базы данных наиболее целесообразно использовать cursorAdapter, где вы указываете, какой курсор использовать. Вы также можете вручную перемещаться по элементам в БД и сохранять их в каком-либо другом объекте в массиве, а затем вы можете иметь arrayAddapter, в котором вы передаете свой массив объектов. В каждом случае вы должны установить метод связывания или переопределения onCreateView, где вы указываете, какой параметр входит в дочерний элемент.

Вы можете посмотреть этот пример http://www.mysamplecode.com/2012/07/android-listview-cursoradapter-sqlite.html для получения дополнительной информации.

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