Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
SoloIlya
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 64
#1

Сумма отображаемых чисел в Listview - Android

04.06.2013, 10:31. Просмотров 846. Ответов 11
Метки нет (Все метки)

Здравствуйте!
Есть БД, а в ней одна таблица в этой таблице есть поле с числовыми значениями, эту поле мы отображаем в ListView. Как можно подсчитать сумму отображаемых числовых значений в ListView и вывести результат в TextView? Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2013, 10:31     Сумма отображаемых чисел в Listview
Посмотрите здесь:

Android Listview
Android ListView
Android Работа с ListView
Кастомизация ListView Android
ListView Android
Цикл по ListView Android
Android id ListView
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 243
05.06.2013, 00:44     Сумма отображаемых чисел в Listview #2
А что Вам мешает сделать запрос к таблице с выводом суммы по нужному полю?
Java
1
2
3
4
Cursor cursor= db.query(TABLE_NAME, new String[] {"SUM("+COLUMN_NAME+")"}, null, null, null, null, null);
if(cursor.moveToFirst()){
                return cursor.getDouble(0); // ну или getLong, getInteger и тд
            }
SoloIlya
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 64
06.06.2013, 11:40  [ТС]     Сумма отображаемых чисел в Listview #3
Дело в том что у меня в listview выводятся те данные, которые соответствуют определенной дате!

Добавлено через 1 час 0 минут
Пищу вот так:
Java
1
2
3
4
 Cursor cursor = sqliteDB.query(Names.TABLE_NAME, new String[]{"SUM("+NamesColumns.KOL+")"}, null, null, null, null, null);
        if(cursor.moveToFirst()){
            return cursor.getInt(0);
            }
Жалуется "Void methods cannot return a value"
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 243
06.06.2013, 16:07     Сумма отображаемых чисел в Listview #4
NamesColumns.KOL и Names.TABLE_NAME - точно ненулевые?
SoloIlya
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 64
06.06.2013, 16:54  [ТС]     Сумма отображаемых чисел в Listview #5
Точно. Вот код, который создает БД:
Java
1
2
3
4
5
db.execSQL("CREATE TABLE " + Names.TABLE_NAME + " (" + BaseColumns._ID
                    + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , " + Names.NamesColumns.NAME
                    + " TEXT NOT NULL, " + Names.NamesColumns.PRICE + " REAL NOT NULL, "
                    + Names.NamesColumns.KOL + " INTEGER NOT NULL,"
                    +Names.NamesColumns.DATE + " STRING NOT NULL);");
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 243
06.06.2013, 17:40     Сумма отображаемых чисел в Listview #6
А можно весь метод, возвращающий сумму, полностью увидеть, а не кусочно?
SoloIlya
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 64
06.06.2013, 17:59  [ТС]     Сумма отображаемых чисел в Listview #7
Он у меня еще не реализован! Где мне его нужно реализовать?
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 243
06.06.2013, 18:09     Сумма отображаемых чисел в Listview #8
Ну как правило, создается адаптер, содержащий класс, расширяющий SQLiteOpenHelper.
А в самом адаптере Вы уже реализуете методы для работы с БД. В частности, и метод суммы.
Типа:
Java
1
2
3
4
5
6
7
8
public long getSum(){
long res=0;
Cursor cursor = sqliteDB.query(Names.TABLE_NAME, new String[]{"SUM("+NamesColumns.KOL+")"}, null, null, null, null, null);
        if(cursor.moveToFirst()){
            res= cursor.getLong(0);
            }
}
return res;
И на крайний случай, попробуйте для теста, вместо переменных, напрямую вписать названия таблицы и столбцов.
Немного не понимаю Ваше разделение, типа BaseColumns._ID. Через точку. Это свойства в классах? Или такие особенные названия переменных? Почему бы просто не задать названия таблиц и столбцов через обычные переменные в классе адаптера.
Java
1
2
3
public static final String TABLE_KIND = "kind_of_costs";
    public static final String TABLE_KIND_ID = "_id";
    public static final String TABLE_KIND_TITLE = "title"; и т.д.
SoloIlya
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 64
06.06.2013, 18:42  [ТС]     Сумма отображаемых чисел в Listview #9
У меня есть три класса, которые работают с БД, первый вот:
package DataBase;

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import DataBase.DatabaseContract.Names;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;
 
 
public class DatabaseOpenHelper extends SQLiteOpenHelper {
    
    
    
    public DatabaseOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }
 
    private static final String DATABASE_NAME = "db.db";
    private static final int DATABASE_VERSION = 1;
    private static final String DEBUG_TAG = DatabaseOpenHelper.class.getSimpleName();
    private static final boolean LOGV = false;
    private SQLiteDatabase db;
   // public void dropTables(SQLiteDatabase db) {
 
       // if (LOGV) {
         //       Log.d(DEBUG_TAG, "onDropTables called");
       // }
       // db.execSQL("DROP TABLE IF EXISTS " + Names.TABLE_NAME);
//}
 
    @Override
    public void onCreate(SQLiteDatabase db) {
        
        if (LOGV) {
            Log.v(DEBUG_TAG, "onCreate()");
    }
    db.execSQL("CREATE TABLE " + Names.TABLE_NAME + " (" + BaseColumns._ID
                    + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , " + Names.NamesColumns.NAME
                    + " TEXT NOT NULL, " + Names.NamesColumns.PRICE + " REAL NOT NULL, "
                    + Names.NamesColumns.KOL + " INTEGER NOT NULL,"
                    +Names.NamesColumns.DATE + " STRING NOT NULL);");
    
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
        Log.d(DEBUG_TAG, "onUpgrade called");
 
    }
 
 
 
}
Добавлено через 1 минуту
А второй содержит в себе сетеры и гетеры, и третий реализует изменение, удаление и вставку данных. Наверное надо вставлять метод суммы в последний?

Добавлено через 1 минуту
Еще вопрос: как мне потом передать результат в TextView другого класса?
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 243
06.06.2013, 18:50     Сумма отображаемых чисел в Listview #10
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
public class MyDBAdapter {
    public static final String DATABASE_NAME = "mydb.db";
    public static final int DATABASE_VERSION =1;
    
    // таблица 
    public static final String TABLE1_= "table1";
    public static final String TABLE1_ID = "_id";
    public static final String TABLE1_TITLE = "title";
    
 
    private final Context context;
    private SEDBOpenHelper dbHelper;
    private SQLiteDatabase db;
    
    
    public MyDBAdapter(Context _context) {
        this.context = _context;
        dbHelper = new SEDBOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    
    private static class MyDBOpenHelper extends SQLiteOpenHelper {
        public MyDBOpenHelper(Context context, String name,
                CursorFactory factory, int version) {
            super(context, name, factory, version);
        }
        
        private static final String DATABASE_CREATE1 = "create table if not exists " +TABLE1 + " (" + TABLE1_ID + " integer PRIMARY KEY AUTOINCREMENT NOT NULL, " + TABLE1_TITLE + " text not null);";
        
        // создаем таблицу в БД
        @Override
        public void onCreate(SQLiteDatabase _db) {
            _db.execSQL(DATABASE_CREATE1);
            Log.i("My Log", "Table "+TABLE1+" created");
            
        }
 
        //обновление БД
        @Override
        public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) {
        // реализуется при увеличении версии БД
            
        }
    }
    
    // закрытие бд
        public void close() {
            db.close();
        }
        
    // открытие бд
        public void open() throws SQLiteException {
            try {
                db = dbHelper.getWritableDatabase();
                
            } catch (SQLiteException ex) {
                ex.printStackTrace();
                db = dbHelper.getReadableDatabase();
                
            }
 
        }
        //и далее можно впихивать любые методы с работы с db, тот же самый getSumm
        public long getSumm(){
          long res=0;
          Cursor cursor = db.query(TABLE1, new String[]{"SUM("+TABLE1_ID+")"}, null, null, null, null, null);
          if(cursor.moveToFirst()){
            res= cursor.getLong(0);
          }
          return res;
         }
       //другие методы .......
 
}
Это самая простая реализация адаптера, описанная в любом учебнике по Android.
И уже в кодах приложения создаете экземпляр класса MyDBAdapter
Java
1
2
MyDBAdapter myDBAdapter=new MyDBAdapter(this);
myDBAdapter.open(); // открываем соединение
ну и если надо, например, в ondestroy, закрываем соединение с БД: myDBAdapter.close();
SoloIlya
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 64
06.06.2013, 19:00  [ТС]     Сумма отображаемых чисел в Listview #11
Подскажите как полученный результат с метода getSum связать с выводимыми данными в Listview, который находится в другом классе?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2013, 22:22     Сумма отображаемых чисел в Listview
Еще ссылки по теме:

Android из БД в ListView
ListView с ресурсами Android
Android ListView
Android Listview в listview
Android ListView пустой

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 243
06.06.2013, 22:22     Сумма отображаемых чисел в Listview #12
Этот метод Вы можете вызывать в любом классе, создав в нем объект типа MyBDAdapter
Java
1
2
3
4
5
6
7
...
MyDBAdapter myDBAdapter=new MyDBAdapter(this);
myDBAdapter.open();
...
TextView tv=(TextView)findViewById(R.id.tv);
tv.setText(Long.toString(myDBAdapter.getSumm()));
...
Примерно так
Yandex
Объявления
06.06.2013, 22:22     Сумма отображаемых чисел в Listview
Ответ Создать тему
Опции темы

Текущее время: 14:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru