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

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

Войти
Регистрация
Восстановить пароль
 
TanaTiX
Модератор
2742 / 1587 / 144
Регистрация: 19.02.2011
Сообщений: 5,714
#1

Значение в БД не изменяется - Программирование Android

11.09.2016, 13:46. Просмотров 203. Ответов 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;
    }
 
}
Ошибок никаких нет. Почему не происходят изменения не понятно. Впечатление, что упускаю что-то простое. Заранее спасибо за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2016, 13:46     Значение в БД не изменяется
Посмотрите здесь:

Не изменяется текст в TextView - Программирование Android
...А возможно беда в чем - то другом Собственно простецкая программа. Не могу и проверить на работоспособность, т.к все хорошо, но при...

Не изменяется стиль текста - Программирование Android
Здравствуйте. Хочу спросить, может кто сталкивался с таким. Есть два вот таких кода 1. if (mCheckI.isChecked()) { ...

Иконка приложения не изменяется - Программирование Android
Добрый день! Хотел бы поставить свою иконку вместо стандартной. смотрел данную тему: ...

Не изменяется текст в TextView при звонке - Программирование Android
Здравствуйте. Пытаюсь реализовать следующее: Есть activity, где проигрывается аудио. Хочу чтобы при входящем звонке в TextView появлялась...

Цвет шрифта изменяется не только у нажатого дочернего элемента но и у др. доч. элементов в соседних группах - Программирование Android
Уважаемые программисты! Подскажите, пожалуйста, как исправить мой код так, чтобы при нажатии на дочерний элемент компонента...

Переданное значение REQUEST_LOGIN = 1 возвращает другое значение - Программирование Android
Пытаюсь из фрагмента вызвать Другую активность и получить результа. Из фрагмента вызываю код: private void startActivity() { ...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 932
11.09.2016, 14:27     Значение в БД не изменяется #2
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, если вы выбираете этот вариант,то вам нужно будет вручную добавлять методы модификации, напишите мне об этом, если надумаете, если вам это нужно и я выдерну код с рабочего проекта на продакшне, удачи!
TanaTiX
Модератор
2742 / 1587 / 144
Регистрация: 19.02.2011
Сообщений: 5,714
12.09.2016, 08:30  [ТС]     Значение в БД не изменяется #3
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 минут
Все еще актуально. Хотя бы направление.
vxg
Модератор
3124 / 1926 / 210
Регистрация: 13.01.2012
Сообщений: 7,377
12.09.2016, 08:46     Значение в БД не изменяется #4
TanaTiX, изменится должен только тот элемент на котором вы кликнули или другой? Если тот же - просто устанавливайте значения прямо в обработчике. Чтобы обработчик знал чей он храните холдер в теге кнопки
TanaTiX
Модератор
2742 / 1587 / 144
Регистрация: 19.02.2011
Сообщений: 5,714
12.09.2016, 10:55  [ТС]     Значение в БД не изменяется #5
vxg, нет, я думал, что проблема в изменении, а дело оказалось в том, что значение в БД не изменяется (по хорошему можно было бы тему переименовать). А БД нужно в любом случае менять. В доках читаю, что у меня все должно шуршать правильно, а включаешь - не работает.
Yandex
Объявления
12.09.2016, 10:55     Значение в БД не изменяется
Ответ Создать тему
Опции темы

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