如何在Android上的SQLite中打印数据表

时间:2014-11-05 05:39:09

标签: android sqlite

我不知道如何在Android上打印存储在SQLite中的数据表

首先,我写了数据库文件:

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();       


    }

然后,我使用ListView显示数据

 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>

2 个答案:

答案 0 :(得分:0)

类似的教程在这里:

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

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

他们正在使用ListView,并且您要打印的数据看起来也一样,如果您正在使用它,除了您的Activity类之外,您可能还需要编写适配器类。 还有两个用于显示ListView的xml布局和用于在ListView中显示ListItem

以下是您的示例代码:尝试一下,我对此进行了测试,可能会有一些修正,但这个想法就在那里。

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>

答案 1 :(得分:0)

您看到Contact@41e5cd78 Contact@41e65ec8,因为您正在将Contact个对象显示为字符串。

toString()类中实施Contact方法:

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

如果您的代码中的其他所有内容都没问题(我还没有选中),您会在列表视图中看到每个联系人的名字和姓氏。