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

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

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

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

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

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

SetImageResource в CursorAdapter - Программирование Android
Здравствуйте. Создал свой CursorAdapter public class TodoCursorAdapter extends CursorAdapter { public TodoCursorAdapter(Context...

CursorAdapter с типом идентификатора CHAR - Программирование Android
В серверной части БД идентификаторы справочника имеют текстовый формат. SimpleCursorAdapter требует получения целочисленных данных для...

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

Краш приложения - Программирование Android
Здравствуйте! Решил научиться делать приложения для андройд. Через SDK Manager установил пакеты Android 2.2 и 4.2 (в каждом пакете выбрал...

Кастомный список - Программирование Android
Здравствуйте. Пытаюсь сделать список с помощью RecyclerView. Нужно разделить его на несколько частей, примерно 3-4. Каждая часть должна...

Не работает кастомный адаптер - Программирование Android
Делаю программу с собственным адаптером для ListView. Компилятор ни на что не ругается, но активность с листом не открывается. Выполнение...

Кастомный адаптер listView - Программирование Android
Доброго времени суток, в общем впервые столкнулся с задачей создания кастомного адаптера для listView. Нашел много примеров/статей,...

ListView и кастомный адаптер - Программирование Android
Добрый день ув. Программисты! Нашёл код который заполняет ListView с кастомным адаптером. Но вот проблема ListView создаётся...

Краш при создании активности - Программирование Android
public class Main_Activity extends Activity { private class LogIn extends AsyncTask<Void, Void, Void> { @Override ...

Кастомный ArrayAdapter для Spinner - Программирование Android
Создал свой адаптер. Привязал его к списку Spinner. Получил идентификатор выбранной записи. Ну вроде бы как получается в каждом элементе...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,706
Завершенные тесты: 1
16.09.2016, 17:39     Краш - кастомный cursoradapter #2
вопрос в чем?
где код?
где лог ошибки, а не вольный пересказ?
leonardo666
1 / 1 / 0
Регистрация: 16.09.2016
Сообщений: 49
17.09.2016, 05:08  [ТС]     Краш - кастомный cursoradapter #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".


И все тупик.

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


Заранее спасибо за помощь !!!!!!!!!!!!!!!!!!!!!!!!!
Ответ Создать тему
Опции темы

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