Android 本地/远程数据源 object 改造

58 阅读1分钟

1.本地数据源

/**
 * 书籍本地数据源
 */
object BookLocalDataSource : BookDataSource {
    private val appExecutors: AppExecutors = AppExecutors()
    private val bookDao: BookDao = AppDatabase.getDatabase(MyApplication.context).bookDao()

    /**
     * 获取书籍列表
     */
    override fun getBooks(callback: CommonCallback<List<Book>>) {
        appExecutors.diskIO.execute {
            callback.onSuccess(bookDao.getBooks())
        }
    }

    /**
     * 更新书籍
     */
    override fun updateBook(book: Book, callback: CommonCallback<Book>) {
        appExecutors.diskIO.execute {
            bookDao.updateBook(book)
            callback.onSuccess(book)
        }
    }

    /**
     * 删除所有书籍
     */
    fun deleteAllBook(callback: CommonCallback<Boolean>) {
        appExecutors.diskIO.execute {
            bookDao.deleteAllBook()
            callback.onSuccess(true)
        }
    }
}

2.远程数据源

/**
 * 书籍远程数据源
 */
object BookRemoteDataSource : BookDataSource {
    /**
     * 书籍服务
     */
    private val bookService: BookService = ServiceCreator.create<BookService>()

    /**
     * 获取书籍列表
     */
    override fun getBooks(callback: CommonCallback<List<Book>>) {
        bookService.getBooks().enqueue(object : Callback<Result<List<Book>>> {
            override fun onResponse(
                call: Call<Result<List<Book>>>,
                response: Response<Result<List<Book>>>
            ) {
                response.body()?.also {
                    if (it.status == 0) {
                        callback.onSuccess(it.data)
                    } else {
                        callback.onFailure(R.string.error_net)
                    }
                }
            }

            override fun onFailure(call: Call<Result<List<Book>>>, t: Throwable) {
                callback.onFailure(R.string.error_net)
            }
        })
    }

    /**
     * 更新书籍
     */
    override fun updateBook(book: Book, callback: CommonCallback<Book>) {
        bookService.updateBook(book.id, book).enqueue(object : Callback<Result<Book>> {
            override fun onResponse(call: Call<Result<Book>>, response: Response<Result<Book>>) {
                response.body()?.also {
                    if (it.status == 0) {
                        callback.onSuccess(it.data)
                    } else {
                        callback.onFailure(R.string.error_net)
                    }
                }
            }

            override fun onFailure(call: Call<Result<Book>>, t: Throwable) {
                callback.onFailure(R.string.error_net)
            }
        })
    }
}

👀关注公众号:Android老皮!!!欢迎大家来找我探讨交流👀