Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
leonardo666
2 / 2 / 0
Регистрация: 16.09.2016
Сообщений: 101
#1

Краш - кастомный cursoradapter - Программирование Android

16.09.2016, 17:19. Просмотров 336. Ответов 2
Метки нет (Все метки)

Здравствуйте. Пишу программу с базой sqlite уже всю голову сломал. Идея такая если создаю стандартный simplecursoradapter то при фильтрации (поиске) все нормально. Но если создаю свой с методом getview то приложение крешется с исключением попытка обратиться к уже закрытому курсору и ссылается на строчку cursor.moveposition (position );. что делать ума не приложу весь инет перерыл. Заранее спасибо за помощь !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2016, 17:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Краш - кастомный cursoradapter (Программирование Android):

SetImageResource в CursorAdapter
Здравствуйте. Создал свой CursorAdapter public class TodoCursorAdapter...

CursorAdapter с типом идентификатора CHAR
В серверной части БД идентификаторы справочника имеют текстовый формат....

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

Краш приложения
Здравствуйте! Решил научиться делать приложения для андройд. Через SDK Manager...

Кастомный EditText
КАК сделать вот такой EditText? куда копать ?

Кастомный список
Здравствуйте. Пытаюсь сделать список с помощью RecyclerView. Нужно разделить...

2
Pablito
2644 / 2126 / 725
Регистрация: 12.05.2014
Сообщений: 7,433
Завершенные тесты: 1
16.09.2016, 17:39 #2
вопрос в чем?
где код?
где лог ошибки, а не вольный пересказ?
0
leonardo666
2 / 2 / 0
Регистрация: 16.09.2016
Сообщений: 101
17.09.2016, 05:08  [ТС] #3
да, конечно, просто сейчас не у компа, писал с телефона сейчас все добавлю.

Добавлено через 11 часов 23 минуты
код адаптера

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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQuery;
import android.database.sqlite.SQLiteQueryBuilder;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
 
import java.util.ArrayList;
 
/**
 * Created by filippov on 10.07.2016.
 */
public class CrdCursorAdapter extends SimpleCursorAdapter {
 
 
    private LayoutInflater inflater;
    private Cursor cursor;
 
    SQLiteDatabase database;
 
 
 
 
 
 
 
    public CrdCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
        super(context, layout, c, from, to, flags);
        inflater = LayoutInflater.from(context);
 
        this.cursor=c;
 
 
    }
 
 
    @Override
    public Object getItem(int position) {
        return position;
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
 
 
    static final class ViewHolder {
     
        TextView crdName, crdDtCrt, crdDtEd, crd_id, crdSys, crdNum,
                 crdBnk, crdValid, crdFio, crdCvs, crdPn, crdCmnt ;
 
        ImageView crdImg;
 
        int crdNamecolumn, crdCrtCrtcolumn, crdEdtCrtcolumn, crdIdCrtcolumn, crdSysCrtcolumn,
                crdNumcolumn, crdBnkcolumn, crdValidcolumn, crdFiocolumn, crdCvscolumn, crdPncolumn, crdCmntcolumn;
 
    }
 
    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        return super.newView(context, cursor, parent);
 
    }
 
    @Override
    public View getView(final int position, View convertView, final ViewGroup parent) {
        super.getView(position, convertView, parent);
 
        if (convertView == null) {
 
            convertView = inflater.inflate(R.layout.crd_item, parent, false);
 
            ViewHolder viewHolder = new ViewHolder();
 
            viewHolder.crdName = (TextView) convertView.findViewById(R.id.crdnm);
            viewHolder.crdDtCrt = (TextView) convertView.findViewById(R.id.crddtnew);
            viewHolder.crdDtEd = (TextView) convertView.findViewById(R.id.crddted);
            viewHolder.crd_id = (TextView) convertView.findViewById(R.id.crdid);
            viewHolder.crdSys = (TextView) convertView.findViewById(R.id.crdsys);
            viewHolder.crdNum = (TextView) convertView.findViewById(R.id.crdnum);
            viewHolder.crdBnk = (TextView) convertView.findViewById(R.id.crdbnk);
            viewHolder.crdValid = (TextView) convertView.findViewById(R.id.crdvalid);
            viewHolder.crdFio = (TextView) convertView.findViewById(R.id.crdusernm);
            viewHolder.crdCvs = (TextView) convertView.findViewById(R.id.crdcvs);
            viewHolder.crdPn = (TextView) convertView.findViewById(R.id.crdpn);
            viewHolder.crdCmnt = (TextView) convertView.findViewById(R.id.crdcmnt);
 
            viewHolder.crdImg = (ImageView) convertView.findViewById(R.id.crdlogoimage);
 
            viewHolder.crdNamecolumn = cursor.getColumnIndexOrThrow("name");
            viewHolder.crdCrtCrtcolumn = cursor.getColumnIndexOrThrow("newdttime");
            viewHolder.crdEdtCrtcolumn = cursor.getColumnIndexOrThrow("editdttime");
            viewHolder.crdIdCrtcolumn = cursor.getColumnIndexOrThrow("_id");
            viewHolder.crdSysCrtcolumn = cursor.getColumnIndexOrThrow("crdsys");
            viewHolder.crdNumcolumn = cursor.getColumnIndexOrThrow("crdnum");
            viewHolder.crdBnkcolumn = cursor.getColumnIndexOrThrow("crdbnk");
            viewHolder.crdValidcolumn = cursor.getColumnIndexOrThrow("crdvld");
            viewHolder.crdFiocolumn = cursor.getColumnIndexOrThrow("crdflname");
            viewHolder.crdCvscolumn = cursor.getColumnIndexOrThrow("crdky");
            viewHolder.crdPncolumn = cursor.getColumnIndexOrThrow("crdpn");
            viewHolder.crdCmntcolumn = cursor.getColumnIndexOrThrow("comment");
 
            convertView.setTag(viewHolder);
 
        }
 
            ViewHolder holder = (ViewHolder) convertView.getTag();
 
// ошибка ссылается на эту строчку !!!!!!!!!!!!!!!!!!!!!!!!!!!!
                cursor.moveToPosition(position);
 
                holder.crdName.setText(cursor.getString(holder.crdNamecolumn));
                holder.crdDtCrt.setText(cursor.getString(holder.crdCrtCrtcolumn));
                holder.crdDtEd.setText(cursor.getString(holder.crdEdtCrtcolumn));
                holder.crd_id.setText(cursor.getString(holder.crdIdCrtcolumn));
                holder.crdSys.setText(cursor.getString(holder.crdSysCrtcolumn));
                holder.crdNum.setText(cursor.getString(holder.crdNumcolumn));
                holder.crdBnk.setText(cursor.getString(holder.crdBnkcolumn));
                holder.crdValid.setText(cursor.getString(holder.crdValidcolumn));
                holder.crdFio.setText(cursor.getString(holder.crdFiocolumn));
                holder.crdCvs.setText(cursor.getString(holder.crdCvscolumn));
                holder.crdPn.setText(cursor.getString(holder.crdPncolumn));
                holder.crdCmnt.setText(cursor.getString(holder.crdCmntcolumn));
 
 
                if (holder.crdSys.getText().equals("VISA")) {
                    holder.crdImg.setImageResource(R.drawable.visa);
                } else if (holder.crdSys.getText().equals("MASTERCARD")) {
                    holder.crdImg.setImageResource(R.drawable.mstcrd);
                } else if (holder.crdSys.getText().equals("AMERICAN EXPRESS")) {
                    holder.crdImg.setImageResource(R.drawable.amexp);
                } else if (!holder.crdSys.getText().equals("AMERICAN EXPRESS") && !holder.crdSys.getText().equals("VISA") &&
                        !holder.crdSys.getText().equals("MASTERCARD")) {
 
                    holder.crdImg.setImageResource(R.drawable.card_bx);
                }
 
 
 
 
        return  convertView;
 
 
    }
 
 
 
 
 
}
код MainActivity

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
92
93
94
        dbHelper = new DBHelper(this);
        // mCursor = dbHelper.getAllItems();
 
        database = dbHelper.getWritableDatabase();
 
        cardlist = (ListView) findViewById(R.id.listV);
 
// слушатель едита для поиска карты
        final EditText edcrdsrch = (EditText) findViewById(R.id.searchEd);
        // edcrdsrch.setText("");
 
        crdcursor = database.query(DBHelper.TABLE_CRD, null, null, null, null, null, "newdttime DESC");
 
        //  crdcursor = database.query(DBHelper.TABLE_CRD,null, "name like ?", new String[]{"%"+"миог"+"%"},null, null, "newdttime DESC");
 
 
        String[] from = new String[]{DBHelper.KEY_NAME, DBHelper.KEY_CRDNUM, DBHelper.KEY_CRDKY,
                DBHelper.KEY_CRDPN, DBHelper.KEY_CRDVLD, DBHelper.KEY_CRDSYS, DBHelper.KEY_CRDBNK, DBHelper.KEY_CRDFLNM,
                DBHelper.KEY_COMMENT, DBHelper.KEY_DTNW, DBHelper.KEY_DTED, DBHelper.KEY_ID};
 
 
        int[] to = new int[]{R.id.crdnm, R.id.crdnum, R.id.crdcvs, R.id.crdpn, R.id.crdvalid,
                R.id.crdsys, R.id.crdbnk, R.id.crdusernm, R.id.crdcmnt,
                R.id.crddtnew, R.id.crddted, R.id.crdid};
 
        // создаем адаптер и настраиваем список
 
        cardlist.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
 
        final CrdCursorAdapter crdscAdapter = new CrdCursorAdapter(this, R.layout.crd_item, crdcursor, from, to, 0);
 
 
//листвью
        cardlist.setAdapter(crdscAdapter);
 
 
 
 
 
 
        edcrdsrch.addTextChangedListener(new TextWatcher() {
            @Override
            public void afterTextChanged(Editable s) {
 
 
 
            }
 
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
 
 
            }
 
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
 
               crdscAdapter.getFilter().filter(s.toString());
 
 
 
 
            }
 
        });
 
 
        // устанавливаем провайдер фильтрации
        crdscAdapter.setFilterQueryProvider(new FilterQueryProvider() {
            @Override
            public Cursor runQuery(CharSequence constraint) {
 
 
 
                if (constraint == null || constraint.length() == 0 && !crdcursor.isClosed()) {
 
                    return
 
                            database.query("mycrd", null, null, null, null, null, "newdttime DESC");
 
 
 
                } else {
 
 
                    return
                            database.query("mycrd", null, "name like ?", new String[]{"%"+constraint.toString()+"%"},null, null,
                                    "newdttime DESC");
 
 
                }
 
 
            }
 Комментарий модератора 
используйте теги

Вот если передаю это в кастомный адаптер CrdCursorAdapter то при работе провайдера фильтрации
ошибка (исключение) "Attempting to access a closed CursorWindow.Most probable cause: cursor is deactivated prior to calling this method".


И все тупик.

Адаптер сделал специально что бы отображать логотипы в соотвествии с названиями платежных систем


Заранее спасибо за помощь !!!!!!!!!!!!!!!!!!!!!!!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2016, 05:08
Привет! Вот еще темы с решениями:

Кастомный EditText
Подскажите, каким образом можно реализовать EditText как на скрине, при этом...

Кастомный Toolbar
Как сделать свой Toolbar. В нем должны быть кнопка назад, меню, фотография и...

Кастомный EditText
Как можно внутри EditText установить маску для текста звездочку - * сделать...

Кастомный ImageView
Прошу сильно не пинать, только учусь. Итак ,суть задачи: есть кастомный класс...


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

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

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