2014-11-05 1 views
1

Я не знаю, как распечатать таблицу данных, которая хранит в SQLite на AndroidКак распечатать таблицу данных в SQLite на Android

Во-первых, я пишу файл базы данных:

public class DatabaseHandler extends SQLiteOpenHelper { 

    // All Static variables 

    // Database Version 
    private static final int DATABASE_VERSION = 1; 

    // Database Name 
    private static final String DATABASE_NAME = "Localization"; 

    // Contacts table name 
    private static final String TABLE_CONTACTS = "RSSIMAP"; 

    // Contacts Table Columns names 
    private static final String KEY_ID = "id"; 
    private static final String KEY_NAME = "device_name"; 
    private static final String KEY_RSSI = "RSSI"; 
    private static final String KEY_DIST = "distance"; 
    private static final String KEY_TIME = "time_stamp"; 


    public DatabaseHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    // Creating Tables 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" 
       + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
       + KEY_RSSI + " TEXT," + KEY_DIST +" TEXT,"+ KEY_TIME +" TEXT"+")"; 
     db.execSQL(CREATE_CONTACTS_TABLE); 
    } 

    // Upgrading database 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS); 

     // Create tables again 
     onCreate(db); 
    } 

    /** 
    * All CRUD(Create, Read, Update, Delete) Operations 
    */ 

    // Adding new contact 
    void addContact(Contact contact) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME, contact.getDeviceName()); // device name 
     values.put(KEY_RSSI, contact.getRSSI()); // RSSI 
     values.put(KEY_DIST, contact.getDistance()); // 
     values.put(KEY_TIME, contact.getTime()); 
     // Inserting Row 
     db.insert(TABLE_CONTACTS, null, values); 
     db.close(); // Closing database connection 
    } 

    // Getting single contact 
    Contact getContact(int id) { 

     SQLiteDatabase db = this.getReadableDatabase(); 

     Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, 
       KEY_NAME, KEY_RSSI, KEY_DIST,KEY_TIME }, KEY_ID + "=?", 
       new String[] { String.valueOf(id) }, null, null, null, null); 
     if (cursor != null) 
      cursor.moveToFirst(); 

     Contact contact = new Contact(Integer.parseInt(cursor.getString(0)), 
       cursor.getString(1), cursor.getString(2),cursor.getString(3), cursor.getString(4)); 
     // return contact 
     return contact; 
    } 

    // Getting All Contacts 
    public List<Contact> getAllContacts() { 
     List<Contact> contactList = new ArrayList<Contact>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_CONTACTS; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Contact contact = new Contact(); 
       contact.setID(Integer.parseInt(cursor.getString(0))); 
       contact.setDeviceName(cursor.getString(1)); 
       contact.setRSSI(cursor.getString(2)); 
       contact.setDistance(cursor.getString(3)); 
       contact.setTime(cursor.getString(4)); 
       // Adding contact to list 
       contactList.add(contact); 
      } while (cursor.moveToNext()); 
     } 

     // return contact list 
     return contactList; 
    } 

    // Updating single contact 
    public int updateContact(Contact contact) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME, contact.getDeviceName()); 
     values.put(KEY_RSSI, contact.getRSSI()); 
     values.put(KEY_DIST, contact.getDistance()); 
     values.put(KEY_TIME, contact.getTime()); 
     // updating row 
     return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", 
     new String[] { String.valueOf(contact.getID()) }); 
    } 

    // Deleting single contact 
    public void deleteContact(Contact contact) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     db.delete(TABLE_CONTACTS, KEY_ID + " = ?", 
       new String[] { String.valueOf(contact.getID()) }); 
     db.close(); 
    } 


    // Getting contacts Count 
    public int getContactsCount() { 
     String countQuery = "SELECT * FROM " + TABLE_CONTACTS; 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.rawQuery(countQuery, null); 
     cursor.close(); 

     // return count 
     return cursor.getCount(); 
    } 

} 

Тогда , я вставил несколько строк в базе данных, но мне еще нужно написать деятельность, чтобы напечатать таблицу, но я запутался, как писать (использовать Gridview или Listview?) .. Большое спасибо

public class Display extends Activity { 

    private ArrayList<String> results = new ArrayList<String>(); 

    DatabaseHandler ins_rssi_dis = new DatabaseHandler(this); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_display); 


      List<Contact> contacts = ins_rssi_dis.getAllContacts();  


    } 

Затем я использую ListV МЭН для отображения данных

public class Display extends ListActivity { 

     DatabaseHandler datasource = new DatabaseHandler(this); 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_display); 

     List<Contact> datadisplay = datasource.getAllContacts(); 
     ArrayAdapter<Contact> adapter = new ArrayAdapter<Contact>(this,android.R.layout.simple_list_item_1, datadisplay); 

     ListView myList=(ListView)findViewById(android.R.id.list); 
     myList.setAdapter(adapter); 

    } 

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

} 

Но результаты не являются правильными, такие как:

Контакт @ 41e5cd78 Контакт @ 41e65ec8

Я предполагаю getAllContacts() методы неверен, но я не конечно ...

activity_display.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" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".Display" > 

    <ListView android:id="@id/android:list" 

      android:layout_width="fill_parent" 

      android:layout_height="fill_parent"/> 
</RelativeLayout> 
+0

Это зависит от ваших данных, но я думаю, что вам нужно 'ListView', вы должны прочитать документацию и посмотреть, какая из них лучше для вас –

+0

печатать, как вы хотите распечатать их в LOG? или хотите показать их на экране? – Darpan

+0

То, что вы пытались напечатать –

ответ

0

Вы видите [email protected] [email protected], потому что вы показываете Contact объектов в виде строк.

Реализуйте метод toString()Contact в классе:

@Override 
public String toString() { 
    return this.firstName+" "+this.lastName; // example 
} 

Если все остальное в вашем коде в порядке (я не проверял), вы увидите имя и фамилию каждого контакта в вашем Посмотреть список.

+0

Он работает !! большое спасибо ! – swing

0

подобные учебники здесь:

http://www.vogella.com/tutorials/AndroidSQLite/article.html

http://www.tutorialspoint.com/android/android_sqlite_database.htm

они используют ListView, и Ваши данные будут напечатаны также ищет то же самое, если вы собираетесь с этим, возможно, необходимо написать адаптер класс в дополнение к вашему классу деятельности. также имеют два xml-макета для отображения ListView и для отображения ListItem в ListView

Вот пример кода для вас: попробуйте, я не проверял это, возможно, имеет некоторую коррекцию, но идея есть.

ContactListAdapter класс:

public class ContactListAdapter { 

private final Activity context; 
List<Contact> contactAdapter = new ArrayList<Contact>(); 

public ContactListAdapter(Activity context,List<Contact> contactlist) { 

     super(context, R.layout.download_item, downloadList); 
     this.context = context; 
     this.contactAdapter = contactlist; 

} 
@Override 
public View getView(int position, View view, ViewGroup parent) { 

    LayoutInflater inflater = context.getLayoutInflater(); 
    View rowView= inflater.inflate(R.layout.cotact_item, null, true); 

    TextView txtTitle1 = (TextView) rowView.findViewById(R.id.item1); 
    TextView txtTitle2 = (TextView) rowView.findViewById(R.id.item2); 
    TextView txtTitle3 = (TextView) rowView.findViewById(R.id.item3); 
    TextView txtTitle4 = (TextView) rowView.findViewById(R.id.item4); 
    TextView txtTitle5 = (TextView) rowView.findViewById(R.id.item5); 

    txtTitle1.setText(contactAdapter[position].getId()); 
    txtTitle2.setText(contactAdapter[position].getName()); 
    txtTitle3.setText(contactAdapter[position].getRssi()); 
    txtTitle4.setText(contactAdapter[position].getDistance()); 
    txtTitle5.setText(contactAdapter[position].getTime()); 


    return rowView; 
} 
} 

Дисплей класс

public class Display extends ListActivity { 

    DatabaseHandler datasource = new DatabaseHandler(this); 


@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display); 

    List<Contact> datadisplay = datasource.getAllContacts(); 

//  ArrayAdapter<Contact> adapter = new ArrayAdapter<Contact>(this,android.R.layout.simple_list_item_1, datadisplay); 

    ContactListAdapter adapter = new ContactListAdapter(Display.this, datadisplay); 

    ListView myList=(ListView)findViewById(android.R.id.list); 
    myList.setAdapter(adapter); 

} 

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

activity_display.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" 
android:paddingBottom="5dp" 
android:paddingLeft="5dp" 
android:paddingRight="5dp" 
android:paddingTop="5dp" 
tools:context=".RecentActivity" > 
<ListView 
    android:id="@+id/main_download_list" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" > 
</ListView> 
</RelativeLayout> 

contact_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<TableRow 
    android:layout_width="fill_parent"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android: android:orientation="vertical"  

    <TextView 
     android:id="@+id/item1" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:text="id" /> 
    <TextView 
     android:id="@+id/item2" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:text="name" /> 
    <TextView 
     android:id="@+id/item3" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:text="rssi" /> 
    <TextView 
     android:id="@+id/item4" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:text="distance" /> 
    <TextView 
     android:id="@+id/item5" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:text="time" /> 
    </LinearLayout> 
    </TableRow> 
    </TableLayout> 
+0

Я использую ListView для отображения, но результаты «@ 41e5cd78 ..» Я думаю, что мой метод getAllContacts() может быть неправильным .... Но я не уверен ... – swing

+0

вы пытались напечатать результат на консоли или Logcat? Как вы проходите эти данные? пожалуйста, отправьте эти коды для справки. надеюсь, что проблема с передачей аргументов в адаптер clas .. при использовании, а не значение объекта String возвращается! –

+0

Я просто печатаю его на планшете, я не знаю, как его печатать на лог-коте или консоли ... другой метод, такой как вставка, обновление кажется хорошим, только печать не может работать. – swing

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