SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT FROM user WHERE age > ?", new String[]{"20"}); if (cursor.moveToFirst()) { do { String name = cursor.getString(cursor.getColumnIndex("name")); // 处理数据 } while (cursor.moveToNext()); } cursor.close();
@Dao public interface UserDao { @Query("SELECT FROM user WHERE age > :age") List<User> getUsersByAge(int age); }
@Query("SELECT FROM user WHERE age > :age") LiveData<List<User>> getUsersByAgeLiveData(int age);
适用场景:RESTful API 请求,支持多种数据格式(JSON/XML)。
示例代码:
public interface ApiService { @GET("users") Call<List<User>> getUsers(@Query("age") int age); } Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class); apiService.getUsers(20).enqueue(new Callback<>() { @Override public void onResponse(Call<List<User>> call, Response<List<User>> response) { // 处理成功结果 } @Override public void onFailure(Call<List<User>> call, Throwable t) { // 处理失败 } });
缺点:回调嵌套导致代码复杂(可结合 RxJava 或协程优化)。
优势:避免回调地狱,代码更简洁。
示例代码:
interface ApiService { @GET("users") suspend fun getUsers(@Query("age") age: Int): List<User> } val retrofit = Retrofit.Builder() .baseUrl("https://api.example.com/") .addConverterFactory(GsonConverterFactory.create()) .build() val apiService = retrofit.create(ApiService::class.java) GlobalScope.launch { try { val users = apiService.getUsers(20) // 更新 UI } catch (e: Exception) { // 处理异常 } }
表格对比:
| 特性 | Callback 模式 | 协程模式 |
|———————|—————————-|————————–|
| 代码简洁度 | 低(嵌套回调) | 高(顺序执行) |
| 异常处理 | 需手动 try/catch | 可直接抛出/捕获 |
| 线程管理 | 需手动切换 | 自动继承协程上下文 |
Uri uri = ContactsContract.Contacts.CONTENT_URI; Cursor cursor = context.getContentResolver().query( uri, null, // 所有列 "age > ?", new String[]{"20"}, null ); // 解析 cursor...
READ_CONTACTS
),API 复杂度较高。RealmResults<User> results = realm.where(User.class) .greaterThan("age", 20) .findAll();
age
)添加索引。LIMIT
和 OFFSET
(SQLite)或 PagingSource
(Room)。LiveData
或内存缓存减少重复查询。interface ApiService { @GET("users") suspend fun getUsers(@Query("page") page: Int, @Query("limit") limit: Int): List<User> } // 调用时动态传递 page 参数
val pager = Pager(config = PagingConfig(pageSize = 20)) { apiService.getUsers(it, 20) // it 为当前页码 } // 通过 flow 获取分页数据