/** * Calculates the average value on a given column. * * <pre> * LitePal.average(Person.class, "age"); * </pre> * * You can also specify a where clause when calculating. * * <pre> * LitePal.where("age > ?", "15").average(Person.class, "age"); * </pre> * * @param modelClass * Which table to query from by class. * @param column * The based on column to calculate. * @return The average value on a given column. */ public double average(Class<?> modelClass, String column) { return average(BaseUtility.changeCase(modelClass.getSimpleName()), column); }
/** * Calculates the average value on a given column. * * <pre> * LitePal.average("person", "age"); * </pre> * * You can also specify a where clause when calculating. * * <pre> * LitePal.where("age > ?", "15").average("person", "age"); * </pre> * * @param tableName * Which table to query from. * @param column * The based on column to calculate. * @return The average value on a given column. */ public static double average(String tableName, String column) { synchronized (LitePalSupport.class) { FluentQuery cQuery = new FluentQuery(); return cQuery.average(tableName, column); } }
@Override public void onClick(View view) { double result = 0; switch (view.getId()) { case R.id.avg_btn1: result = LitePal.average(Singer.class, "age"); mResultText.setText(String.valueOf(result)); break; case R.id.avg_btn2: try { result = LitePal.where("age > ?", mAgeEdit.getText().toString()).average( Singer.class, "age"); mResultText.setText(String.valueOf(result)); } catch (Exception e) { e.printStackTrace(); } break; default: } }
@Override public void run() { synchronized (LitePalSupport.class) { final double average = average(tableName, column); if (executor.getListener() != null) { Operator.getHandler().post(new Runnable() { @Override public void run() { executor.getListener().onFinish(average); } }); } } } };
@Test public void testAverage() { double result = LitePal.average(Student.class, "age"); double realResult = -100; Cursor cursor = LitePal.findBySQL("select avg(age) from " + studentTable); if (cursor.moveToFirst()) { realResult = cursor.getDouble(0); } cursor.close(); assertEquals(realResult, result); result = LitePal.where("id > ?", "99").average(studentTable, "age"); cursor = LitePal.findBySQL("select avg(age) from " + studentTable + " where id > ?", "99"); if (cursor.moveToFirst()) { realResult = cursor.getDouble(0); } cursor.close(); assertEquals(realResult, result); try { LitePal.average(Student.class, "nosuchcolumn"); fail(); } catch (Exception e) { e.printStackTrace(); } }