Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

ListView. После добавления кнопки перестал быть доступен сам ListView - Программирование Android
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам список стал недоступен для клика, а...

Listview вывод данных и переход по нажатию на другой Listview SQLite - Программирование Android
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с пытаюсь написать программу где первый экран...

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

ListView, ToggleButton, SQLite, CursorAdapter. Как найти idItem в ListView, где была нажата ToggleButton? - Программирование Android
Добрый день. Затрудняюсь понять один момент: У меня есть ListView, который заполнен Items. Каждый Item - это свой XML. Пока...

Копирование данных из 1 listView во 2 listView - Программирование Android
Нужно что бы при нажатии на один элемент в первом ListView он копировался во второй ListView причём многократно.Но я использую...

Использование ListView в ListView - Программирование Android
Всем привет. Можете показать как использовать ListView в ListView, с заполнением как внешнего ListView, так и внутреннего причем с...

11
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 253
05.06.2013, 00:44 #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 и тд
            }
1
SoloIlya
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 64
06.06.2013, 11:40  [ТС] #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"
0
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 253
06.06.2013, 16:07 #4
NamesColumns.KOL и Names.TABLE_NAME - точно ненулевые?
1
SoloIlya
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 64
06.06.2013, 16:54  [ТС] #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);");
0
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 253
06.06.2013, 17:40 #6
А можно весь метод, возвращающий сумму, полностью увидеть, а не кусочно?
1
SoloIlya
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 64
06.06.2013, 17:59  [ТС] #7
Он у меня еще не реализован! Где мне его нужно реализовать?
0
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 253
06.06.2013, 18:09 #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"; и т.д.
1
SoloIlya
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 64
06.06.2013, 18:42  [ТС] #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 другого класса?
0
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 253
06.06.2013, 18:50 #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();
1
SoloIlya
0 / 0 / 0
Регистрация: 28.05.2013
Сообщений: 64
06.06.2013, 19:00  [ТС] #11
Подскажите как полученный результат с метода getSum связать с выводимыми данными в Listview, который находится в другом классе?
0
JIyrApy
32 / 32 / 1
Регистрация: 22.08.2010
Сообщений: 253
06.06.2013, 22:22 #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()));
...
Примерно так
1
06.06.2013, 22:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2013, 22:22
Привет! Вот еще темы с ответами:

Переход из Listview в Listview - Программирование Android
Как сделать, что бы когда нажимаешь в главном листвью на кнопку, открывалось новое нужное(т.е. то по которому тапнули) активити с другим...

Сумма столбца в listView - C#
Собственно вот проблемам имею listLiew1 разделенный на 2 колонки нужно просуммировать значения второй колонки перебрал весь код который...

Вычислить разность между S1 и S2, где S1-сумма четных чисел от I1 до I2, S2-сумма четных чисел от J1 до J2. - Turbo Pascal
Помогите пожалуйста написать вот такую программу: Вычислить разность между S1 и S2, где S1-сумма четных чисел от I1 до I2, S2-сумма...

Сумма всех натуральных чисел от 1 до 1000, сумма цифр которых равна 10 - Turbo Pascal
Я сначала хотел написать рекурсивную функцию, которая сводила бы расчёт от 3-охзначных чисел к 2-узначным и 1-нозначным, но запутался...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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