-
在DBHelper.java中创建表:
@Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table " + TABLE_WORKOUT + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_WONUMBER + " integer," + KEY_WONAME + " text," + KEY_WODESCRIPTION + " text," + KEY_WOICON + " text," + KEY_WOCOLOR + " text" + ")");}
-
在 MainActivity 中.javaonCreate将创建一些对象,这些对象将根据TABLE_WORKOUT列KEY_WONUMBER中的数字显示
-
需要在 KEY_WONUMBER 中找到最大值并将其交给 MainActivity 中的变量.java并为下一个对象设置下一个数字
-
尝试这样做:
public String getMaxNumber(){ SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor c = db.query(DBHelper.TABLE_WORKOUT, new String[] {"MAX("+DBHelper.KEY_WONUMBER+")"}, null, null, null, null, null); StringBuffer buffer; if(c.getCount()>0){ c.moveToFirst(); String max_id=c.getString(0); buffer.append(max_id); } c.close(); db.close(); return buffer.toString(); }
-
在原始数据中获取下一个错误:
public String getMaxNumber(({ - ';' 预期
返回 buffer.toString((; - *无法从结果类型为 void 的方法返回值
作为Android的新手,需要您的帮助来解决这个问题
public String getMaxNumber(({ - ';' 预期
您缺少结束}
。但是,然后引入缓冲区的修复可能尚未初始化错误,因为您只有StringBuffer buffer;
因此尝试附加到它会导致空指针异常。您需要初始化缓冲区,例如使用StringBuffer buffer = new StringBuffer("");
return buffer.toString((; - *不能从结果类型为 void 的方法返回值
这是缺少关闭}
的结果。请参阅上文如何将此错误替换为另一个错误。
修复
考虑以下代码和其中的注释:-
public class MainActivity extends AppCompatActivity {
DBHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new DBHelper(this);
Log.d("MAXNUMBER", getMaxNumber());
} //<<<<<<<<<< FIX 1 closes the onCreate method
public String getMaxNumber () {
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor c = db.query(DBHelper.TABLE_WORKOUT, new String[]
{"MAX(" + DBHelper.KEY_WONUMBER + ")"},
//{"COALESCE(MAX(" + DBHelper.KEY_WONUMBER + "),0)"}, //Alternative will return 0 instead of null if no rows
null, null, null, null, null);
StringBuffer buffer = new StringBuffer(""); //FIX2 initialize buffer by adding buffer = new StringBuffer("")
if (c.moveToFirst()) { // moveToFirst will return false if no row to move to so no need to check row count
String max_id = c.getString(0);
buffer.append(max_id); //FIX 1 introduces might not have been inittialized (buffer hasn't been inittialized)
}
c.close();
db.close(); // can be inefficient to keep on opening and closing the database
return buffer.toString();
}
}
这将返回(当没有插入任何行时(:-
D/MAXNUMBER: null
- 请参阅注释掉的查询,如果您不想处理 null,则使用 COALESCE 在返回的字符串中返回 0 而不是 null。
我认为您必须尝试db.rawQuery("从"+DBHelper.TABLE_WORKOUT,null(方法中选择MAX("+DBHelper.KEY_WONUMBER+"(而不是db.query((