Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,550

Значение в БД не изменяется

11.09.2016, 13:46. Показов 644. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При клике по кнопке должны вноситься изменения в локальную БД, что сразу должно отразиться на экране.
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package com.tanatix.checkinternetresourceschanges;
 
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
 
import java.util.List;
 
/**
 * Created by TanaTiX on 28.08.2016.
 */
public class ResourceListAdapter extends ArrayAdapter<Resource> {
 
    private UpdateController controller = new UpdateController();
    private List<Resource> list = null;
 
    public ResourceListAdapter(Context context, List<Resource> list){
        super(context, R.layout.list_item_main, list);
        this.list = list;
        setNotifyOnChange(true);
    }
    static class ViewHolder{
        protected Button button;
        protected TextView name;
        protected TextView html;
        protected TextView date;
        protected TextView root;
        protected TextView link;
    }
 
    @Override
    public View getView(final int position, View convertView, ViewGroup parent){
        Log.w("adapter", "getView update");
        final Resource resource = getItem(position);
 
        if(convertView == null){
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item_main, null);
        }
        final ViewHolder viewHolder = new ViewHolder();
 
        viewHolder.name = (TextView)convertView.findViewById(R.id.name);
        viewHolder.date = (TextView)convertView.findViewById(R.id.date);
        viewHolder.root = (TextView)convertView.findViewById(R.id.root);
        viewHolder.link = (TextView)convertView.findViewById(R.id.link);
        viewHolder.html = (TextView)convertView.findViewById(R.id.html);
        viewHolder.button = (Button)convertView.findViewById(R.id.updateResourceButton);
 
        viewHolder.name.setText(resource.get_name());
        viewHolder.root.setText(resource.get_root());
        viewHolder.link.setText(resource.get_link());
        viewHolder.html.setText(resource.get_html());
        //viewHolder.html.setText(Integer.toString(resource.get_id()));
        Log.w("list adapter", "constructor " + resource);
 
 
        if(resource.get_update() == DatabaseHelper.UP_PROGRESS || resource.get_update() == DatabaseHelper.UP_WAIT){
            viewHolder.button.setClickable(false);
            viewHolder.button.setText("locked");
        }else{
            viewHolder.button.setClickable(true);
            viewHolder.button.setText("update");
        }
 
        viewHolder.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.w("click", "test button click " + position + " " + resource);
                ContentValues data = new ContentValues();
                data.put(DatabaseHelper.UP, DatabaseHelper.UP_PROGRESS);//происходит изменение одного int значения
                DatabaseHelper db = DatabaseSingleton.getInstance().getDataBase();
                db.updateData(resource, data);
 
                clear();
                list = DatabaseSingleton.getInstance().getDataBase().getAllResources();
                addAll(list);
                notifyDataSetChanged();
            }
        });
        return convertView;
    }
 
}
Ошибок никаких нет. Почему не происходят изменения не понятно. Впечатление, что упускаю что-то простое. Заранее спасибо за помощь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.09.2016, 13:46
Ответы с готовыми решениями:

Вычислить значение функции a = b ^2 sin (b), причем b изменяется от 0,9 до 1,7 с шагом 0,2. Найти среднее значение разности между элементами
Доброго времени суток ! Помогите решить задачу ! Нужно написать в цикле с постусловием следующее : Вычислить значение функции...

Изменяется значение щетчика
програма читает с файлов числа, и выводит на екран. Не могу понять, почему щетчики i,j после исполнения цыкла увеличиваются на 1? Пишу в VS...

Не изменяется значение Checkbox
Добрый день!Сделал пользовательскую форму ввода данных в БД на листе с использованием Form Control и не могу изменить значение checkbox...

4
Автор FAQ
Автор FAQ
 Аватар для REALIST07
644 / 199 / 21
Регистрация: 11.06.2010
Сообщений: 1,024
11.09.2016, 14:27
1) Можно попробовать переопределить обновление списка:
Java
1
2
3
4
@Override
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
    }
2) Можно попробовать вынести логику за пределы адаптера, и обновлять список непосредственно в Activity
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
private View.OnClickListener listener = null;
public ResourceListAdapter(Context context, List<Resource> list,View.OnClickListener listener){
        super(context, R.layout.list_item_main, list);
        this.list = list;
        this.listener = listener;
        setNotifyOnChange(true);
    }
 
 
viewHolder.button.setOnClickListener(listener);
        return convertView;
    }
 
// а это объявить в активити и передавать в конструктор
View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.w("click", "test button click " + position + " " + resource);
                ContentValues data = new ContentValues();
                data.put(DatabaseHelper.UP, DatabaseHelper.UP_PROGRESS);//происходит изменение одного int значения
                DatabaseHelper db = DatabaseSingleton.getInstance().getDataBase();
                db.updateData(resource, data);
 
                clear();
                list = DatabaseSingleton.getInstance().getDataBase().getAllResources();
                addAll(list);
                notifyDataSetChanged();
            }
        };
3) Если это все не помогает, то можно унаследоваться не от ArrayAdapter,а от BaseAdapter, если вы выбираете этот вариант,то вам нужно будет вручную добавлять методы модификации, напишите мне об этом, если надумаете, если вам это нужно и я выдерну код с рабочего проекта на продакшне, удачи!
1
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
12.09.2016, 08:30  [ТС]
REALIST07, спасибо за отзыв, но похоже дело не в обновлении списка, а в изменении данных в БД. Пока сам покумекаю, не получится - отпишусь.

Добавлено через 51 минуту
Да, тема названа не совсем корректно.
В общем данные не изменяются
Собственно обработчик клика, в котором должно запускать обновление записи.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
viewHolder.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Log.w("click", "test button click " + position + " " + resource);
                ContentValues data = new ContentValues();
                data.put(DatabaseHelper.UP, DatabaseHelper.UP_PROGRESS);
                DatabaseHelper db = DatabaseSingleton.getInstance().getDataBase();
                Log.w(">>>adapter", ""+list);
                db.updateData(resource, data);
                Log.w(">>>adapter", ""+list);
                clear();
                list = DatabaseSingleton.getInstance().getDataBase().getAllResources();
                addAll(list);
                notifyDataSetChanged();
                //Log.w(">>>adapter", ""+list);
            }
        });
И метод, в котором происходит обновление (при этом значение countChanges становится равным 1)
Java
1
2
3
4
5
6
7
8
public void updateData(Resource resource, ContentValues values){
        Log.w("update item", "id: "+BaseColumns._ID + " old value ");
        db = this.getWritableDatabase();
        int countChanges = db.update(DATABASE_TABLE, values, BaseColumns._ID + "= ?", new String[]{Integer.toString(resource.get_id())});
        //int countChanges = db.update(DATABASE_TABLE, values, BaseColumns._ID + "= " + resource.get_id() , null);
        Log.w("update item", "id: "+BaseColumns._ID + " new value " + countChanges);
 
    }
И еще фрагмент
Java
1
 public static final int UP_PROGRESS = 2;
Нужное поле в БД по умолчанию имеет 0.
Вроде делаю все по написанному в уроках, но в консоль выходят не обновленные данные. Куда копать?

Добавлено через 13 часов 30 минут
Все еще актуально. Хотя бы направление.
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
12.09.2016, 08:46
TanaTiX, изменится должен только тот элемент на котором вы кликнули или другой? Если тот же - просто устанавливайте значения прямо в обработчике. Чтобы обработчик знал чей он храните холдер в теге кнопки
0
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,550
12.09.2016, 10:55  [ТС]
vxg, нет, я думал, что проблема в изменении, а дело оказалось в том, что значение в БД не изменяется (по хорошему можно было бы тему переименовать). А БД нужно в любом случае менять. В доках читаю, что у меня все должно шуршать правильно, а включаешь - не работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.09.2016, 10:55
Помогаю со студенческими работами здесь

Изменяется значение переменной
Привет, не понятно почему меняется значение переменной Theme.ID, в первой форме принимает значение 1,а после перехода на вторую по не...

Почему изменяется значение?
Здравствуйте! Есть класс Cell, в котором есть List с именем Genome. Мне надо изменить случайный элемент Cell2, но вместе с ним меняется и...

Не изменяется значение в DataGridView
Имею следующий код, label1 просто для проверки того что, значение выбирается. Дак вот данные в датагрид не изменяются в зависимости от...

Не изменяется значение высоты формы
здравствуйте, как получается в коде Forma.Height = 100 Forma.Caption = Forma.Height что я в заголовке вижу не 100, а 150...

Значение аргумента x изменяется от a до b с шагом h
Здравствуйте, нужна помощь с задачкой. Я ее почти решил, но что-то сделал неправильно. Хелп плиз. Полный текст задачи: Значение...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru