使用SQLiteOpenHelper
创建数据库和表结构:
public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "app.db"; private static final int VERSION = 1; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 创建表语句 db.execSQL("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 更新表逻辑 } }
// 获取可读数据库 SQLiteDatabase db = helper.getReadableDatabase(); // 查询语句 Cursor cursor = db.rawQuery("SELECT FROM users WHERE id = ?", new String[]{"1"}); // 遍历结果 if (cursor.moveToFirst()) { do { int id = cursor.getInt(cursor.getColumnIndex("id")); String name = cursor.getString(cursor.getColumnIndex("name")); // 处理数据 } while (cursor.moveToNext()); } cursor.close(); // 必须关闭游标
// 定义实体 @Entity public class User { @PrimaryKey() public int id; public String name; } // 定义DAO @Dao public interface UserDao { @Query("SELECT FROM user WHERE id = :userId") User getUserById(int userId); } // 使用方式 AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "app.db").build(); User user = db.userDao().getUserById(1);
在AndroidManifest.xml
中添加:
<uses-permission android:name="android.permission.INTERNET" />
// Retrofit示例 public interface ApiService { @GET("users") Call<List<User>> getUsers(); } Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://example.com/api/") .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService api = retrofit.create(ApiService.class); Call<List<User>> call = api.getUsers(); call.enqueue(new Callback<List<User>>() { @Override public void onResponse(Call<List<User>> call, Response<List<User>> response) { if (response.isSuccessful()) { // 处理数据 } } @Override public void onFailure(Call<List<User>> call, Throwable t) { // 处理错误 } });
问题现象 | 解决方案 |
---|---|
数据库连接失败 | 检查网络权限、服务器地址、防火墙设置 |
主线程操作数据库 | 使用AsyncTask 或ExecutorService 处理耗时操作 |
SQLite数据库文件不存在 | 确认SQLiteOpenHelper 的onCreate 方法被调用 |
远程查询返回空数据 | 检查网络请求参数、服务器接口是否正常响应 |
解答:
使用SQLiteDatabase.update()
方法或Room的@Update
注解。
// SQLite方式 ContentValues values = new ContentValues(); values.put("name", "New Name"); db.update("users", values, "id = ?", new String[]{"1"}); // Room方式 @Dao public interface UserDao { @Update void updateUser(User user); }
解答:
synchronized
关键字保证线程安全 LiveData
或RxJava
实现异步响应式