Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
3 / 3 / 1
Регистрация: 15.10.2015
Сообщений: 59

Обработка событий при работе с sqlite

15.10.2015, 15:25. Показов 1420. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, утоните пожалуйста как правильно отработать событие.
При обработке SQL запроса
если после условия WHERE = идет переменная которая есть однозначно в столбце все отрабатывает.
если после условия WHERE = идет переменная которой нет в столбце приложение закрывается выдавая сообщение:
Unfortunately, gbna has stoped.
как продолжить работу программы и вернуть пользователю сообщение что ни чего не найдено.
поиск чз LIKE работает, но это не нужно.



public void onResume(){
super.onResume();
try {
sqlHelper.open();
/* String query = " SELECT " + DatabaseHelper.COLUMN_DETECT + ","+ DatabaseHelper.COLUMN_ID +
" FROM " + DatabaseHelper.TABLE +
" Where " + DatabaseHelper.COLUMN_E_CODE + " LIKE "+ " '%" + mRequest.getText()+ "%' " ;*/
try
{
String query = " SELECT " + DatabaseHelper.COLUMN_DETECT + ","+ DatabaseHelper.COLUMN_ID +
" FROM " + DatabaseHelper.TABLE +
" Where " + DatabaseHelper.COLUMN_E_CODE + "="+ mRequest.getText();
userCursor = sqlHelper.database.rawQuery(query, null);
userCursor.moveToFirst();

}
catch (Exception e)
{
Log.i(TAG, "Крах");
}

Log.i(TAG, "Реализуем запрос");
// Log.i(TAG, String.valueOf(userCursor));

userCursor.moveToFirst();
String Test = userCursor.getString(userCursor.getColum nIndex(DatabaseHelper.COLUMN_DETECT));
String Test1 = userCursor.getString(userCursor.getColum nIndex(DatabaseHelper.COLUMN_ID));
//String[] headers = new String[]{DatabaseHelper.COLUMN_DETECT, DatabaseHelper.COLUMN_E_MESSAGE};
// String.valueOf(userCursor.getColumnCount ());

header.setText("Найдено элементов: " + String.valueOf(userCursor.getCount()));
mTest.setText( Test );
mErroeMeesage.setText(Test1);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2015, 15:25
Ответы с готовыми решениями:

"Attempt to re-open an already-closed object" при работе с SQLite
Добрый день. Разрабатываю приложение и столкнулся с проблемой... Лог выдаёт вот такое: FATAL EXCEPTION: main ...

Подскажите по работе с SQLite
Идея такова: есть приложение под андройд, в какой-то момент пользователь нажимает, например, "добавить человека", вводит фио,...

Обработка событий
Добрый день!Пишу в данный момент книгу-приложение.Вопрос такой:как можно заменить if;else или это будет самое просто решение? Тоесть...

8
 Аватар для dubok79
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 587
17.10.2015, 00:09
А вы зайдите в саму базу sqlite и выполните в ней свой запрос. Поймете, что вы делаете не так.
0
3 / 3 / 1
Регистрация: 15.10.2015
Сообщений: 59
19.10.2015, 10:47  [ТС]
Судя по всему изначально вопрос был поставлен не верно.
Программа валилась при работе запроса в onResume(){try{}catch{}}

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
public class MainActivity extends Activity  {
    private ArrayAdapter<String> mAdapter;
    private static final String TAG = "Проверка";
 
 
    ListView mList;
    DatabaseHelper sqlHelper;
    Cursor userCursor = null;
         /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mList=(ListView)findViewById(R.id.listView);
        sqlHelper=new DatabaseHelper(this);
        sqlHelper = new DatabaseHelper(getApplicationContext());
        sqlHelper.create_db();
 
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
    public void sendMessage(View view)  {
        EditText editText = (EditText) findViewById(R.id.edit_message);
        String message = editText.getText().toString();
 
 
        if (editText.getText().length()==0) {
            Toast toast = Toast.makeText(getApplicationContext(),
                    "Введите RAS статус", Toast.LENGTH_SHORT);
            toast.show();
        }
        else {
 
            try {
                sqlHelper.open();
                String query = " SELECT * FROM " + DatabaseHelper.TABLE +
                        " Where " + DatabaseHelper.COLUMN_E_CODE + " LIKE " + " '%" + message + "%' ";
 
                userCursor = sqlHelper.database.rawQuery(query, null);
                int sql=userCursor.getCount();
                Log.i(TAG, "String.valueOf(userCursor.getCount())"+String.valueOf(userCursor.getCount()) );
                Log.i(TAG,""+ sql );
                if (sql ==1) {
                    userCursor.moveToFirst();
                        final String[] OUT_Array = new String[]
                                {
                                        "COLUMN_ID:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_ID)),
                                        "COLUMN_E_CODE:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_E_CODE)),
                                        "COLUMN_E_MESSAGE:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_E_MESSAGE)),
                                        "COLUMN_DETECT:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_DETECT)),
                                        "COLUMN_CHECK:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_CHECK)),
                                        "COLUMN_MOTOR:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_MOTOR)),
                                        "COLUMN_SENSOR:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_SENSOR)),
                                        "COLUMN_ROOT_CHECK:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_ROOT_CHECK)),
                                        "COLUMN_RESOL:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_RESOL)),
                                };
                        mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, OUT_Array);
                        mList.setAdapter(mAdapter);
 
 
                }
                else {
 
                    mList.removeAllViewsInLayout();
                    
                    Toast toast = Toast.makeText(getApplicationContext(),
                            "Не один результат", Toast.LENGTH_SHORT);
                    toast.show();
                }
 
 
 
                sqlHelper.database.close();
                userCursor.close();
 
 
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
 
 
    }
 
 
}
Добавлено через 12 минут
так все работает.
Но появился очередной вопрос. При реализации запроса возможно варианты: не найдено ни чего, найдено одно соответствие, найдено более одного соответствия.
Самое простое когда пользователь с прямыми руками ввел корректно запрос и нашли одно соответствие, заполняем ListView и все ок.
Как заставить кусок перезаписать ListView, сделать так чтоб он исчез из видимости, затереть массив final String[] OUT_Array = new String[]


else {

mList.removeAllViewsInLayout();

Toast toast = Toast.makeText(getApplicationContext(),
"Не один результат", Toast.LENGTH_SHORT);
toast.show();
}
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
19.10.2015, 11:36
Russtem81, а почему просто не перебрать все записи?
Java
1
2
3
4
5
List<Some> result = new ArrayList();
while(cursor.moveToNext()){
    //Достаем строку из крусора
    result.add(то_что_достали);
}
1
3 / 3 / 1
Регистрация: 15.10.2015
Сообщений: 59
19.10.2015, 12:08  [ТС]
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
 else {
                    while (userCursor.moveToNext())
                    {
 
 
                        final String[] OUT_Array = new String[]
                                {
                                        "COLUMN_ID:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_ID)),
                                        "COLUMN_E_CODE:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_E_CODE)),
                                        "COLUMN_E_MESSAGE:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_E_MESSAGE)),
                                        "COLUMN_DETECT:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_DETECT)),
                                        "COLUMN_CHECK:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_CHECK)),
                                        "COLUMN_MOTOR:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_MOTOR)),
                                        "COLUMN_SENSOR:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_SENSOR)),
                                        "COLUMN_ROOT_CHECK:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_ROOT_CHECK)),
                                        "COLUMN_RESOL:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_RESOL)),
                                };
 
                        Log.i(TAG, OUT_Array[3]);
 
                        mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, OUT_Array);
                    }
                    mList.setAdapter(mAdapter);
                }
Спасибо, это у меня есть частично работает. Массив заполняется результатом запроса
например в лог выводится 3й элемент массива:
10-19 14:03:49.576 26038-26038/? I/Проверка﹕ 6
10-19 14:03:49.576 26038-26038/? I/Проверка﹕ COLUMN_DETECT: SCDC and SHDC sensors were not cleared within the specified time when moved deskew roller to home position at MR, MJ commands.
10-19 14:03:49.576 26038-26038/? I/Проверка﹕ COLUMN_DETECT: SCDC sensor was not blocked or SHDC sensor was not cleared within the specified time when moved deskew roller to right.
10-19 14:03:49.576 26038-26038/? I/Проверка﹕ COLUMN_DETECT: SCDC sensor was not cleared or SHDC sensor was not blocked within the specified time when moved deskew roller to left.
10-19 14:03:49.576 26038-26038/? I/Проверка﹕ COLUMN_DETECT: When the deskew roller was moved from right or left position, the home position (SCDC and SHDC sensors were cleared) was detected faster than the specified time.
10-19 14:03:49.576 26038-26038/? I/Проверка﹕ COLUMN_DETECT: SCDC/SHDC sensors were following impossible state.
SCDC sensor : blocked & SHDC sensor : blocked
10-19 14:03:49.576 26038-26038/? I/Проверка﹕ COLUMN_DETECT: During jam clear processing, URHS sensor did not become clear within the specified time.


но mList.setAdapter(mAdapter); вставляется только крайний элемент массива.

вопрос как вывести все элементы из массива


все это не относится к вопросу как затереть ListView если ни чего не найдено
0
111 / 111 / 43
Регистрация: 24.05.2015
Сообщений: 329
19.10.2015, 12:48
Russtem81, я не вникал в ваш код, но по последнему вашему сообщению...
Во-первых, вы каждый раз создаете адаптер заново внутри while, поэтому естественно у вас сохраняется только последний элемент.
Во-вторых, ваша логика по работе с адаптером не правильная - вы должна создать адаптер, до while. В while вы должны заносить данные в ваш array, а потом когда закончите дать команду адаптеру обновить ListView.
1
3 / 3 / 1
Регистрация: 15.10.2015
Сообщений: 59
20.10.2015, 21:09  [ТС]
Все получилось окончательно помогла вот эта статься http://developer.alexanderklim... aylist.php.
С явой ни когда раньше не связывался.
теперь вопрос, ч/з какой оператор отработать разные варианты возврата курсора.
курсор=0
курсор=1
курсор>1
if else как то мало, switch case не очевидно как отработать события когда курсор больше 1)
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
20.10.2015, 21:16
можно и switch, если не может быть значения меньше нуля.
Java
1
2
3
4
5
6
7
8
9
10
11
switch (size){
    case 0:
        //нуль
        break;
    case 1:
        //один
        break;
    default:
        //не нуль и не один, т.е. либо < 0, либо > 1
        break;
}
Ну или if else

Java
1
2
3
4
5
6
7
if(size == 0){
    //нуль
} else if(size == 1){
     //один
} else if(size > 1){
    //больше 1, но если size < 0, ниодно условие не выполнится.
}
1
3 / 3 / 1
Регистрация: 15.10.2015
Сообщений: 59
22.10.2015, 11:12  [ТС]
Вопросы знатокам продолжаются)
Слушаю свой ListView
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
             //   int m = MyList.size();
 
               if (MyList.size() < 10){
                Intent MyIntent = new Intent(MainActivity.this, ImageSoSO.class);
                MyIntent.putExtra(EXTRA_MESSAGE, MyList.get(position));
                startActivity(MyIntent);}
                else {
                    Toast toast = Toast.makeText(getApplicationContext(),
                            "Х...ня прошла, но все же утоните запрос", Toast.LENGTH_SHORT);
                    toast.show();
                   }
                Log.i(TAG, "Значение из массива" + MyList.get(position));
                Log.v(TAG, "Запись = " + position + ", id = " + id);
                
 
            }
        });
отрабатываю два варианта:
1. пользователю можно попытаться найти расположение датчика на схеме и загрузить соответствующею картинку
2. пользователь посмотрел возможные варианты в текстовом формате и вынужден уточнить запрос.
на данном этапе есть облом, после возврата с активности ImageSoSO.class в родительскую активность ListView затирается. ВОПРОС как проще всего сохранить динамически загруженные данные в родительской активности.

активность ImageSoSO.class будет регулярными выражениями обрабатывать строку и загружать картинку, больше ни чего не планируется.

Добавлено через 17 часов 33 минуты
Переписал код, переопределил метод onCreate
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mList=(ListView)findViewById(R.id.listView);
        meditText= (EditText) findViewById(R.id.edit_message);
       // Log.i(TAG, "Значение из массива CREAT" + MyList.size());
        mMessage = meditText.getText().toString();
        //Log.i(TAG, "Значение из массива mMessage  " + mMessage);
        
        SQL(mMessage);
        sqlHelper=new DatabaseHelper(this);
        sqlHelper = new DatabaseHelper(getApplicationContext());
        sqlHelper.create_db();
    }


реализовал для вращения
Java
1
2
3
4
5
6
7
 protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        mMessage=savedInstanceState.getString("count");
 
        // = savedInstanceState.getInt("count");
        Log.d(TAG, "onRestoreInstanceState");
    }
Java
1
2
3
4
5
6
 protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("count",mMessage);
        //outState.putInt("count", cnt);
        Log.d(TAG, "onSaveInstanceState");
    }
Последовательность методов при вызове второй активности и возврат

при переходе на другую активность идет отработка методов
10-22 13:03:45.828 2403-2403/com.example.funktion D/Проверка﹕ onPause
10-22 13:03:46.069 2403-2403/com.example.funktion D/Проверка﹕ onSaveInstanceState
10-22 13:03:46.069 2403-2403/com.example.funktion D/Проверка﹕ onStop

при возврате не отрабатывает метод onRestoreInstanceState
10-22 13:04:19.399 2403-2403/com.example.funktion D/Проверка﹕ onDestroy
10-22 13:04:19.418 2403-2403/com.example.funktion D/Проверка﹕ onStart
10-22 13:04:19.418 2403-2403/com.example.funktion D/Проверка﹕ onResume

Вопрос какую пару методов необходимо использовать при вызове второй активности и возврате с нее.

нашел тему:
http://startandroid.ru/ru/urok... ote-ekrana. но пример с onRetainNonConfigurationInstance и getLastNonConfigurationInstance не очевиден на данный момент.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2015, 11:12
Помогаю со студенческими работами здесь

Обработка событий в цикле
Здравствуйте! Есть массив параметров ArrayList&lt;int&gt; params = new ArrayList&lt;&gt;(); Есть экземпляр слушателя: ...

Обработка событий + прорисовка
Доброго времени суток, создаю свое первое приложение на Android. У меня есть прорисовка в отдельном потоке и обработка событий, проблемма в...

Обработка событий в ExpandableListView
Всем привет. Только начал осваивать Android Studio как столкнулся с рядом проблем: у меня есть Список-дерево ExpandableListView в которой...

Обработка событий в Service
Ребят,как можно отловить события в Service? Что-то не совсем могу понять как сделать,может это вообще не возможно?:D

Обработка событий для массива кнопок
Здравствуйте. У меня в программе создается массив из N ImageButton. и для каждой кнопки нужно обработать событие нажатия. //это...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru