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

Что я неправильно делаю при реализации поиска? - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Запуск приложения по событию http://www.cyberforum.ru/android-dev/thread1280975.html
Здравствуйте. я новичок. поэтому вопросов много, а информации в инете маловато. Хочу сделать дополнение к экранной клавиатуре. Ну, например, зажимаешь надолго кнопку "1", стандартная клава прячется,...
Программирование Android Как добавить перенос строки? Пишу приложение для android, вставил гугл карты, но ни как не могу понять как делать перенос строки, ни \n \n\r \n - ничего не помогает, на карте всё равно всё пишется в одну строчку, как сделать... http://www.cyberforum.ru/android-dev/thread1280954.html
Компонент для отображения картинок Программирование Android
Господа подскажите как называется компонент отображающий картинки в приложении Вконтакте? Или там кастомный какой?
Программирование Android RelativeLayout расположение и связь объектов
Всем привет! Только начинаю осваивать Андроид, решил поэксперементировать с RelativeLayout и столкнулся с проблемой. Как связать более 4х элементов (допустим кнопок) друг с другом? Так, что бы они...
Программирование Android Структура layout. Расположение кнопок http://www.cyberforum.ru/android-dev/thread1280902.html
Что-то я начитался всего, но ничего подходящего не нашел. (Наверно не то читал). Нужно на экране сделать 9 кнопок. (Поле 3х3). Все кнопки должны быть квадратные и в ширину занимать весь экран....
Программирование Android Android Stuodi Gradle AndroidSdk not specified Здравствуйте! Хочу запустить готовый(100% рабочий проект в AndroidStudio). Получаю такую ошибку: Error:Android Source Generator: Android SDK is not specified В Инете внятного ответа не... подробнее

Показать сообщение отдельно
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
22.10.2014, 18:02  [ТС]
Была ошибка в запросе, вы правы. Поменял на
Java
1
String sqlQuery1 = "SELECT * FROM city AS t1, region AS t2 WHERE t1.name LIKE '%' || ? || '%';";
и
Java
1
cursor1.getCount()
стал выдавать 42000.
Но все равно приложение не работает. Сейчас выдает ошибку:

10-22 12:10:00.905: E/AndroidRuntime(10353): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.citycode/com.example.citycode.MainActivity}: java.lang.NullPointerException

Что то не так видимо с реализацией Search... А что - без понятия... Очень нужна помощь.

Добавлено через 1 час 17 минут
Кстати, прописал логи после каждого действия, ошибка как я понял вылазит на этапе -
Java
1
2
        //Обновляем адаптер
        lvData.setAdapter(records);
в методе doMySearch(query);

Т.е. до обновления адаптера лог записывыыется, после уже нет... Может нельзя так обновлять адаптер? В чем тут дело может быть....

Добавлено через 3 часа 32 минуты
Продолжаю общаться сам с собой))) От помощи все еще не откажусь Получилось запустить код, но поиск работает на правильно, т.е. не выдает то что нужно, а весь список. Хотя в лог из Cursor записывается что нужно, т.е. запрос работает. Вот код:

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
package com.example.citycode;
 
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
import android.util.Log;
import android.view.Menu;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
 
public class MainActivity extends ActionBarActivity {
 
  ListView lvData,lvData1;
  DBHelper db;
  SimpleCursorAdapter scAdapter;
  Cursor cursor;
  Cursor cursor1;
  
  final String LOG_TAG = "myLogs";
  final String LOG_TAG1 = "myLogs1";
 
  /** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    // открываем подключение к БД
    db = new DBHelper(this);
    db.open();
    
    // Get the intent, verify the action and get the query
    Intent intent = getIntent();
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
      String query = intent.getStringExtra(SearchManager.QUERY);
      doMySearch(query);
    }
    
    // получаем курсор
    cursor = db.getAllData();
    startManagingCursor(cursor);
    
    // Формируем столбцы сопоставления
    String[] from = new String[] { DBHelper.COLUMN_r_name, DBHelper.COLUMN_region, DBHelper.COLUMN_code};
    int[] to = new int[] { R.id.city_name, R.id.region_name, R.id.city_code };
 
    // создааем адаптер и настраиваем список
    scAdapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from, to);
    lvData = (ListView) findViewById(R.id.listdata);
    lvData.setAdapter(scAdapter);
  }
  
  public void doMySearch(String query) {
        //Ищем совпадения
        Log.d(LOG_TAG, "Before get the C");
        cursor1 = db.fetchRecordsByQuery(query);
        Log.d(LOG_TAG, "After get the C");
        String t = Integer.toString(cursor1.getCount());
        Log.d(LOG_TAG, t);
        startManagingCursor(cursor1);
        String[] from = new String[] { DBHelper.COLUMN_r_name, DBHelper.COLUMN_region, DBHelper.COLUMN_code};
        int[] to = new int[] { R.id.city_name, R.id.region_name, R.id.city_code };
 
        scAdapter = new SimpleCursorAdapter(this,
                R.layout.item, cursor1, from, to);
        Log.d(LOG_TAG, "Setting the adapter");
        //Обновляем адаптер
        logCursor(cursor1);
        lvData = (ListView) findViewById(R.id.listdata);
        lvData.setAdapter(scAdapter);
        Log.d(LOG_TAG, "Adapter was set");
      }
  
//вывод в лог данных из курсора
 void logCursor(Cursor c) {
   if (c != null) {
     if (c.moveToFirst()) {
       String str;
       do {
         str = "";
         for (String cn : c.getColumnNames()) {
           str = str.concat(cn + " = " + c.getString(c.getColumnIndex(cn)) + "; ");
         }
         Log.d(LOG_TAG1, str);
       } while (c.moveToNext());
     }
   } else
     Log.d(LOG_TAG1, "Cursor is null");
 }
  
 
  
     @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.options_main, menu);
        
        // Get the SearchView and set the searchable configuration
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.action_settings).getActionView();
        // Assumes current activity is the searchable activity
        //searchView.setSubmitButtonEnabled(true);
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
        
        return true;
    }
 
  
  protected void onDestroy() {
    super.onDestroy();
    // закрываем подключение при выходе
    db.close();
  }
 
}
Сам поиск стал работать, но выдавать полный список, после того как я в метоже doMySearch определил заново - lvData = (ListView) findViewById(R.id.listdata);
Но как я говорил, поиск все равно работает неправильно, хотя с помощью метода logCursor в лог идут как раз правильные данные.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru