如何摆脱Toast警告中的“Argument'上下文'可能为空”

时间:2014-12-25 10:12:49

标签: java android

我试图在非活动类中使用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()方法调用此方法。我需要显示此消息。

2 个答案:

答案 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的建议进行初始化。