Вопрос, возможно, повторяется, но я искал решение, прежде чем опубликовать его, и не смог найти решение. Я пытаюсь выполнить СУММУ значений столбцов на основе строки, переданной пользователем, но я думаю, что я делаю это неправильно на моем MainActivity.java или на моем DatabaseAccess.java потому что мое приложение падает при передаче строки.
Вот мой метод DatabaseAccess.java:
public String SumMoneyValues (String id){
Cursor cursor = database.rawQuery("SELECT SUM(" + valueColumn + ") as Total FROM " + tableName + " where " + idColumn + " like ?", new String [] { "%" + id + "%" }, null);
String total = "";
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
total = String.valueOf(cursor.getDouble(cursor.getColumnIndex("Total")));
cursor.moveToNext();
}
cursor.close();
return total;
}
Я использую внешнюю базу данных с 5 столбцами TEXT и 1 столбцом DOUBLE(valueColumn). На моей MainActivity я установил TextView и инициализировал его. Вот мои столбцы базы данных:
private static String idColumn = "tag_id";
private static String firstnameColumn = "first_name";
private static String lastnameColumn = "last_name";
private static String phoneColumn = "phone";
private static String addressColumn = "address";
private static String emailColumn = "email";
private static String valueColumn = "valor";
Кстати, мой метод поиска работает нормально:
public List<Contact> getTagDataById(String id) {
List<Contact> list = new ArrayList<>();
Cursor cursor = database.rawQuery("select * from " + tableName + " where " + idColumn + " like ?", new String[] { "%" + id + "%" });
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Contact contact = new Contact();
contact.setFirstName(cursor.getString(0));
contact.setLastName(cursor.getString(1));
contact.setPhone(cursor.getString(2));
contact.setEmail(cursor.getString(3));
contact.setTagId(cursor.getString(4));
contact.setValor(cursor.getString(5));
list.add(contact);
cursor.moveToNext();
}
cursor.close();
return list;
}
Это то, что я пытаюсь реализовать на моей MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_main);
initData();
initView();
initClick();
// Find the GUI components
this.databaseAccess = DatabaseAccess.getInstance(getApplicationContext());}
private String SumMoneyValues (String str) {
databaseAccess.open();
String soma = databaseAccess.SumMoneyValues(str);
databaseAccess.close();
return soma;
}
private void initView() {
swTotalSum = (TextView)findViewById(R.id.swTotalSum);
initListView();
}
...
String testeSoma = SumMoneyValues(epctag);
if (testeSoma != null){
swTotalSum.setText(testeSoma);
} else{
epcTTS.speak("Something went wrong!", TextToSpeech.QUEUE_FLUSH, null);
}
Какой код используется для вызова метода SumMoneyValues в моей функции MainActivity? Извините, новичок здесь.