SQLite AVG Query с предложением Where в приложении Android - PullRequest
0 голосов
/ 14 января 2020

Начинающий 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();
}
...