publi c String getMaxNumber () {- ';' ожидается
Вам не хватает закрытия }
. Однако исправление, которое затем вводит буфер, возможно, не было инициализировано ошибкой, поскольку у вас просто StringBuffer buffer;
Так что попытка добавить к нему приведет к исключению нулевого указателя. Вам нужно инициализировать буфер, например, используя StringBuffer buffer = new StringBuffer("");
return buffer.toString (); - * не может вернуть значение из метода с пустым типом результата
Это результат отсутствующего закрытия }
. см. выше, как эта ошибка заменяется другой.
Исправления
Рассмотрим следующий код и комментарии к нему: -
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
- см. закомментированный запрос, который использует COALESCE для возврата 0, а не ноль в возвращаемой строке, если вы предпочитаете не обрабатывать ноль.