Как автоматически заполнить edittexts, получая данные SQLite? - PullRequest
0 голосов
/ 11 июня 2019

В моем приложении у меня есть форма.В котором пользователь ставит CNIC первым.Если его CNIC уже существует в базе данных SQLite.Имя пользователя и номер мобильного телефона будут автоматически заполнены в текстовых окнах (с помощью TextWatcher).Но всякий раз, когда я набираю тот же CNIC, приложение вылетает.Если CNIC существует в базе данных, вместо автоматического заполнения имени и поля телефона, приложение вылетает.Я очень старался, но не смог решить мою проблему.

Метод запроса:

public List<SGenerateModel> getGeneratedData(String seller_cnic){
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "SELECT " + TABLE_COL2 + ", " + TABLE_COL3 + " FROM " + TABLE_NAME + " WHERE " + TABLE_COL4 + " =?" ;
    Cursor cursor = db.rawQuery(query, new String[]{"" + seller_cnic});

    List<SGenerateModel> listOfSGModel = new ArrayList<>();
    while(cursor.moveToNext()){
        SGenerateModel sGenerateModel = new SGenerateModel(cursor.getString(0), cursor.getString(1));
        listOfSGModel.add(sGenerateModel);
    }
    cursor.close();
    return listOfSGModel;
}

Метод запроса:

public void generate(){

if (etSname != null)
    selName = (!etSname.getText().toString().equals("")?
            etSname.getText().toString() : "NULL");

if (etSphone != null)
    selPhone = (!etSphone.getText().toString().equals("")?
            etSphone.getText().toString() : "NULL");

if (etScnic != null)
    selCnic = (!etScnic.getText().toString().equals("")?
            etScnic.getText().toString() : "NULL");

sGenerateModelList = databaseHelper.getGeneratedData(selCnic);
for (SGenerateModel sGenerateModel : sGenerateModelList){
    selName = sGenerateModel.getSellerName() ;
    etSname.setText(selName);
    selPhone = sGenerateModel.getSellerMobile();
    etSphone.setText(selPhone);
}

}

Код TextWatcher:

TextWatcher textWatcher2 = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        generate();
    }
};

etSname.addTextChangedListener(textWatcher2);
etSphone.addTextChangedListener(textWatcher2);
etScnic.addTextChangedListener(textWatcher2);

LogCat:

android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=939 (# cursors opened by this proc=939)
    at android.database.CursorWindow.<init>(CursorWindow.java:108)
    at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
    at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:138)
    at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:132)
    at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:220)
    at android.database.AbstractCursor.moveToNext(AbstractCursor.java:269)
    at com.example.cattleapp.helpers.DatabaseHelper.getGeneratedData(DatabaseHelper.java:217)
    at com.example.cattleapp.activities.MainActivity.generate(MainActivity.java:536)
    at com.example.cattleapp.activities.MainActivity$7.afterTextChanged(MainActivity.java:241)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...