Начинающий android программист здесь. У меня возникла проблема с моим приложением, которое получает ввод целочисленного идентификатора пользователя и целочисленного рейтинга. Цель состоит в том, чтобы вывести результат среднего рейтинга для каждого пользователя в соответствии с идентификатором пользователя, который сейчас жестко задан в Основном действии. Однако результаты функции getAverage показывают 0. Ошибок нет, но результат в диалоговом окне предупреждений в методе main не соответствует ожидаемому результату. Спасибо за любую помощь, ребята.
DatabaseHelper. java
private static final String TAG = "DatabaseHelper";
private static final int DATABASE_VERSION = 2;
public static final String DATABASE_NAME = "database.db";
public static final String TABLE_NAME_USERRATING = "userrating_table";
public static final String USERRATING_COL_1 = "USERRATINGID";
public static final String USERRATING_COL_2 = "USERRATING";
public static final String USERRATING_COL_3 = "USER_ID";
public DatabaseHelper( Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
SQLiteDatabase db = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME_USERRATING + "(USERRATINGID INTEGER PRIMARY KEY AUTOINCREMENT, USERRATING INTEGER, USER_ID INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME_USERRATING);
onCreate(db);
}
public boolean insertData (String userrating, String userid ){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(USERRATING_COL_2, userrating);
contentValues.put(USERRATING_COL_3, userid);
long result = db.insert(TABLE_NAME_USERRATING, null, contentValues);
if (result == -1){
return false;
} else {
return true;
}
}
public Cursor getAllData() {
SQLiteDatabase db = this.getWritableDatabase();
Cursor result = db.rawQuery("select * from " + TABLE_NAME_USERRATING, null);
return result;
}
public int getAverage(int user_id) {
String query = "SELECT AVG(" + USERRATING_COL_2 + ") FROM " + TABLE_NAME_USERRATING + " WHERE " + USERRATING_COL_3 + " ='" + user_id + "'";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(query, null);
cursor.moveToFirst();
int avg = cursor.getInt(0);
Log.d(TAG, "getAverage: " + avg);
if (cursor.getCount() > 0)
return avg;
else
return 0;
}
}
MainActivity. java
DatabaseHelper myDb;
EditText userid, rating;
Button submit, view, average;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myDb = new DatabaseHelper(this);
myDb = new DatabaseHelper(this);
userid = findViewById(R.id.userid);
rating = findViewById(R.id.rating);
submit = findViewById(R.id.submit);
view = findViewById(R.id.view);
average = findViewById(R.id.average);
addRating();
viewData();
viewAverage();
}
public void addRating() {
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//boolean to check if the data was inserted successfully
boolean isInserted = myDb.insertData(userid.getText().toString() , rating.getText().toString());
if (isInserted == true)
Toast.makeText(MainActivity.this, "Data Inserted", Toast.LENGTH_LONG).show();
else
Toast.makeText(MainActivity.this, "Data Not Inserted", Toast.LENGTH_LONG).show();
}
});
}
//method to view adverts
public void viewData() {
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Cursor result = myDb.getAllData();
if (result.getCount() == 0) {
showMessage("Error", "No data found");
return;
}
StringBuffer buffer = new StringBuffer();
while (result.moveToNext()){
//index of column, starts at 0 (Advert ID)
buffer.append("userratingid: " + result.getString(0) + "\n");
buffer.append("userid: " + result.getString(1) + "\n");
buffer.append("userrating: " + result.getString(2) + "\n");
}
showMessage("Data" , buffer.toString());
}
});
}
public void viewAverage(){
average.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int userid = 1;
int result = myDb.getAverage(userid);
String results = result + "";
showMessage("Data" , results);
}
});
}
public void showMessage(String title, String message){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(true);
builder.setTitle(title);
builder.setMessage(message);
builder.show();
}