我想从SQLite数据库中填充ListView,但Log
显示:[email protected]
。 Gradle构建时没有任何错误或警告。ListView从SQLite显示出奇怪
任何想法有什么不对?我的数据库设置有id
,title
,author
,collection
和body
的字段。
MainActivity.java
package com.example.apple.bookshelf;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView authorsListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
authorsListView = (ListView) findViewById(R.id.authors_list_view);
String[] authors = {"Christie, Agatha","Conan Doyle, Arthur","James, M.R."};
DatabaseHelper db = new DatabaseHelper(this);
List bookList = db.getAllBooks();
/*
ArrayAdapter<String> arrayAdapter =
new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, bookList);
authorsListView.setAdapter(arrayAdapter);
*/
Log.i("test", bookList.toString());
}
}
DatabaseHelper.java
package com.example.apple.bookshelf;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
import java.util.ArrayList;
import java.util.List;
public class DatabaseHelper extends SQLiteAssetHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "books.db";
private static final String TABLE_NAME = "books";
public DatabaseHelper (Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Getting All Contacts
public List<String> getAllBooks() {
List bookList = new ArrayList();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Book book = new Book();
book.setID(Integer.parseInt(cursor.getString(0)));
book.setTitle(cursor.getString(1));
book.setAuthor(cursor.getString(2));
// Adding contact to list
bookList.add(book);
} while (cursor.moveToNext());
}
// return contact list
return bookList;
}
}
Book.java
package com.example.apple.bookshelf;
public class Book {
int id;
String title;
String author;
String collection;
String body;
public Book() {
}
public Book(int id, String title, String author, String collection, String body) {
this.id = id;
this.title = title;
this.author = author;
this.collection = collection;
this.body = body;
}
// getters
public int getID() {
return this.id;
}
public String getTitle() {
return this.title;
}
public String getAuthor() {
return this.author;
}
public String getCollection() {
return this.collection;
}
public String getBody() {
return this.body;
}
// setters
public void setID(int id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setAuthor(String author) {
this.author = author;
}
public void setCollection(String collection) {
this.collection = collection;
}
public void setBody(String body) {
this.body = body;
}
}
您需要自定义适配器来使用具有多个参数的对象填充listview。你的'ArrayAdapter'适用于像String这样的单个对象。所有你需要做的就是创建一个适配器项目(一个项目的布局资源),并在扩展ArrayAdapter的类中使用它。 [Here's](http://www.ezzylearning.com/tutorial/customizing-android-listview-items-with-custom-arrayadapter)一个例子,你应该怎么做。 – grabarz121