Android Studio中SQLite结合if语句设置TextView失效问题排查
问题修复方案
核心问题分析
- DBHelper常量定义错误:重复覆盖
AAAA和AAAA1常量,导致表名、字段名逻辑混乱 - input.java语法错误:数据库插入语句写在OnClickListener代码块外,无法触发执行
- settext.java逻辑错误:直接比较DBHelper的静态字段名(而非数据库存储的实际值),且未初始化TextView实例
修复后的代码
1. DBHelper.java(修正常量定义+新增查询方法)
public class DBHelper extends SQLiteOpenHelper { private static final String DB_NAME = "String.db"; private static final int DB_VERSION = 3; public static final String TABLE_Value = "TABLE_Value"; public static final String AAAA = "AAAA"; public static final String AAAA1 = "AAAA1"; // 修正重复定义问题,改为正确的BBBB/BBBB1常量 public static final String BBBB = "BBBB"; public static final String BBBB1 = "BBBB1"; public DBHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String createTableQueryAA = "CREATE TABLE " + AAAA + " (" + AAAA1 + " TEXT)"; db.execSQL(createTableQueryAA); String createTableQueryBB = "CREATE TABLE " + BBBB + " (" + BBBB1 + " TEXT)"; db.execSQL(createTableQueryBB); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + AAAA); db.execSQL("DROP TABLE IF EXISTS " + BBBB); onCreate(db); } // 新增查询方法,直接获取数据库中存储的字段值 public String getAAAAValue() { SQLiteDatabase db = getReadableDatabase(); String value = ""; Cursor cursor = db.query(AAAA, new String[]{AAAA1}, null, null, null, null, null); if (cursor.moveToFirst()) { value = cursor.getString(cursor.getColumnIndexOrThrow(AAAA1)); } cursor.close(); db.close(); return value; } public String getBBBBValue() { SQLiteDatabase db = getReadableDatabase(); String value = ""; Cursor cursor = db.query(BBBB, new String[]{BBBB1}, null, null, null, null, null); if (cursor.moveToFirst()) { value = cursor.getString(cursor.getColumnIndexOrThrow(BBBB1)); } cursor.close(); db.close(); return value; } }
2. input.java(修正语法错误+完善数据库操作)
// 假设dbHelper已完成初始化 Btn_aaaa.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); db.delete(DBHelper.AAAA, null, null); values.put(DBHelper.AAAA1, "test111"); // 将insert语句移至代码块内,确保点击时执行插入 db.insert(DBHelper.AAAA, null, values); db.close(); // 关闭数据库连接 } }); Btn_bbbb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); db.delete(DBHelper.BBBB, null, null); values.put(DBHelper.BBBB1, "test222"); db.insert(DBHelper.BBBB, null, values); db.close(); } });
3. settext.java(修正TextView初始化+数据库查询逻辑)
import static com.example.test1.DBHelper.AAAA1; import static com.example.test1.DBHelper.BBBB1; public class settext extends AppCompatActivity { TextView Text_test; TextView Text_test2; private DBHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化TextView实例,绑定布局ID Text_test = findViewById(R.id.Text_test); Text_test2 = findViewById(R.id.Text_test2); dbHelper = new DBHelper(this); // 从数据库查询实际存储的值 String aaaaValue = dbHelper.getAAAAValue(); String bbbbValue = dbHelper.getBBBBValue(); // 条件判断并设置文本 if ("test111".equals(aaaaValue)) { Text_test.setText("test111"); } if ("test222".equals(bbbbValue)) { Text_test2.setText("test222"); } } }
关键修复说明
- DBHelper:修复常量重复定义问题,新增封装好的查询方法,避免直接编写底层SQL
- input.java:将插入语句移至点击事件代码块内,确保按钮点击时能正确执行数据插入,同时添加数据库连接关闭逻辑
- settext.java:先初始化TextView实例,再通过DBHelper获取数据库中的实际存储值,最后基于真实值进行条件判断设置文本
内容的提问来源于stack exchange,提问作者akkbar
相关产品推荐
相关产品推荐

