我试图在非活动类中使用Toast。为此,我尝试以下方法:
//Method to get all books from database
public List<Book> getAllBooks() {
List<Book> books = new LinkedList<Book>();
Context context = null;
// 1. build the query
String query = "SELECT * FROM " + TABLE_BOOKS;
// 2. get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
// 3. go over each row, build book and add it to list
Book book = null;
if (cursor.moveToFirst()) {
do {
book = new Book();
book.setId(Integer.parseInt(cursor.getString(0)));
book.setTitle(cursor.getString(1));
book.setAuthor(cursor.getString(2));
// Add book to books
books.add(book);
} while (cursor.moveToNext());
} else {
Toast.makeText(context, "No books in database", Toast.LENGTH_LONG).show();
}
....
但是context
上有一个黄色警告标记,上面写着Argument 'context' might be null
这是预期的,因为它被初始化为null。如果没有我的程序崩溃,我如何在这种情况下使用上下文?从活动的onCreate()
方法调用此方法。我需要显示此消息。
答案 0 :(得分:2)
如果您从活动的getAllBooks
致电onCreate
,则只需将活动实例作为上下文传递即可。
public List<Book> getAllBooks(Context context) {
....
}
在活动类中:
public void onCreate(Bundle savedInstanceState)
{
... getAllBooks(this); ....
}
答案 1 :(得分:0)
当然,'上下文'可能为空。它是null,因为在代码的“Context context = null”行中使用null初始化它。对于Toast来说,通常可以使用“= getApplicationContext()”初始化它,或者按照Eran的建议进行初始化。