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

Краш - кастомный cursoradapter - Android

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

Android Кастомный стиль Button
Android Кастомный EditText
Android Краш при создании активности
Android CursorAdapter с типом идентификатора CHAR
ListView и кастомный адаптер Android
Android Кастомный EditText
Кастомный ImageView Android
Кастомный заголовок ActionBar Android
Android Кастомный список
Краш приложения Android
Android SetImageResource в CursorAdapter
Кастомный EditText Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1868 / 1602 / 493
Регистрация: 12.05.2014
Сообщений: 5,796
Завершенные тесты: 1
16.09.2016, 17:39     Краш - кастомный cursoradapter #2
вопрос в чем?
где код?
где лог ошибки, а не вольный пересказ?
leonardo666
0 / 0 / 0
Регистрация: 16.09.2016
Сообщений: 26
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".


И все тупик.

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


Заранее спасибо за помощь !!!!!!!!!!!!!!!!!!!!!!!!!
Yandex
Объявления
17.09.2016, 05:08     Краш - кастомный cursoradapter
Ответ Создать тему
Опции темы

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