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

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

Войти
Регистрация
Восстановить пароль
 
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
#1

Курсор для ListView - Программирование Android

03.11.2014, 13:19. Просмотров 652. Ответов 5
Метки нет (Все метки)

Всем привет.
Получаю вот такую ошибку при старте Activity:
Кликните здесь для просмотра всего текста
11-03 13:07:37.600: E/SQLiteLog(9261): (1) near "null": syntax error
11-03 13:07:37.600: D/AndroidRuntime(9261): Shutting down VM
11-03 13:07:37.600: W/dalvikvm(9261): threadid=1: thread exiting with uncaught exception (group=0x41970930)
11-03 13:07:37.600: E/AndroidRuntime(9261): FATAL EXCEPTION: main
11-03 13:07:37.600: E/AndroidRuntime(9261): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.metroframe/com.example.metroframe.MainActivity}: android.database.sqlite.SQLiteException: near "null": syntax error (code 1): , while compiling: create table null (_id integer primary key autoincrement,line_num text,line_name text,station_name text,cellid text);
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.app.ActivityThread.access$600(ActivityThread.java:153)
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.os.Handler.dispatchMessage(Handler.java:99)
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.os.Looper.loop(Looper.java:137)
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.app.ActivityThread.main(ActivityThread.java:5226)
11-03 13:07:37.600: E/AndroidRuntime(9261): at java.lang.reflect.Method.invokeNative(Native Method)
11-03 13:07:37.600: E/AndroidRuntime(9261): at java.lang.reflect.Method.invoke(Method.java:511)
11-03 13:07:37.600: E/AndroidRuntime(9261): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
11-03 13:07:37.600: E/AndroidRuntime(9261): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
11-03 13:07:37.600: E/AndroidRuntime(9261): at dalvik.system.NativeStart.main(Native Method)
11-03 13:07:37.600: E/AndroidRuntime(9261): Caused by: android.database.sqlite.SQLiteException: near "null": syntax error (code 1): , while compiling: create table null (_id integer primary key autoincrement,line_num text,line_name text,station_name text,cellid text);
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
11-03 13:07:37.600: E/AndroidRuntime(9261): at com.example.metroframe.MainActivity$DBHelper.onCreate(MainActivity.java:217)
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
11-03 13:07:37.600: E/AndroidRuntime(9261): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
11-03 13:07:37.600: E/AndroidRuntime(9261): at com.example.metroframe.MainActivity$DBHelper.getAllData(MainActivity.java:199)
11-03 13:07:37.600: E/AndroidRuntime(9261): at com.example.metroframe.MainActivity.onCreate(MainActivity.java:56)


Код активити:
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
public class MainActivity extends Activity{
    .....
 
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbHelper = new DBHelper(this);
        //Определяем все виджеты и View 
list = (ListView) findViewById(R.id.listView1);
        
        cursor = dbHelper.getAllData();
        startManagingCursor(cursor);
 
        String[] from = new String[] { DBHelper.LINE_NAME};
        int[] to = new int[] { R.id.txt}; // id TextView в R.layout.ttn_row
        final SimpleCursorAdapter notes = new SimpleCursorAdapter(this,R.layout.listview_activity, cursor, from, to);
        list.setAdapter(notes);
        
    .....
                
        add_bt.setOnClickListener(new OnClickListener() {
             
            public void onClick(View v) {
                // TODO Auto-generated method stub
//              addData();
                
                
                
            }
        }); 
        
    
        //DBHelper тут
          class DBHelper extends SQLiteOpenHelper {
              private static final String DATABASE_NAME = "metro.db";
                private static final int DATABASE_VERSION = 1;
              public static final String TABLE = "MTSRUS";
              public static final String COLUMN_ID = "_id";
                public static final String LINE_NUM = "line_num";
                public static final String LINE_NAME = "line_name";
                public static final String STATION_NAME = "station_name";
                public static final String CELLID = "cellid";
                public DBHelper(Context context) {
                  // конструктор суперкласса
                  super(context, DATABASE_NAME, null, DATABASE_VERSION);
                  
                  
                }
 
                 public Cursor getAllData() {
                     SQLiteDatabase db = getWritableDatabase();
                        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
                        String sqlTables = "MTSRUS";
                        String [] sqlSelect = {"0 _id", "line_name"}; 
                        
 
                        qb.setTables(sqlTables);
                        Cursor c = qb.query(db, sqlSelect, null, null,
                                null, null, null);
 
                        c.moveToFirst();
                        return c;           
                      }
        
                @Override
                public void onCreate(SQLiteDatabase db) {
                  
                  // создаем таблицу с полями
                  db.execSQL("create table "+ Data.table_name + " ("
                      + "_id integer primary key autoincrement," 
                      + "line_num text,"
                      + "line_name text,"
                      + "station_name text,"
                      + "cellid text" + ");");
                }
 
                @Override
                public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
                }    
          }
        
        //Подготовим и вставим данные
        public void addData() {
            ContentValues cv = new ContentValues();
            // получаем данные из полей ввода
            String line_name = item.toString();
            String station_name = item_st.toString();
            String line_num = String.valueOf(linenum);
            String cellid_station = cell_txt.getText().toString();
            SQLiteDatabase db = dbHelper.getWritableDatabase();
            
         // подготовим данные для вставки в виде пар: наименование столбца - значение
              
              cv.put("line_name", line_name);
              cv.put("station_name", station_name);
              cv.put("line_num", line_num);
              cv.put("cellid", cellid_station);
              // вставляем запись и получаем ее ID
              long rowID = db.insert(Data.table_name, null, cv);
              System.out.println("row inserted, ID = " + rowID+cellid_station);
              dbHelper.close();
        }
    }
Проблема начинается при отработке строки
final SimpleCursorAdapter notes = new SimpleCursorAdapter(this,R.layout.listview_activity, cursor, from, to);

Есть подозрение что с курсором что-то не так, но понимания что не так нет. Может кто сталкивался?? Прошу помощи
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2014, 13:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Курсор для ListView (Программирование Android):

ListView. После добавления кнопки перестал быть доступен сам ListView - Программирование Android
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам список стал недоступен для клика, а...

Listview вывод данных и переход по нажатию на другой Listview SQLite - Программирование Android
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с пытаюсь написать программу где первый экран...

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

Свои идентификаторы для элементов ListView - Программирование Android
Как добавить свои идентификаторы в listview для элементов?

Выпадающее меню для каждого пункта ListView - Программирование Android
Здравствуйте! Как реализовать подобное меню в списке? Я придумал только с использованием spinner-а в каждом item's view-е, но...

Способы хранения данных для expandable listview - Программирование Android
Написал адаптер для expandedlistview. В каких объектах хранить данные для адаптера? Данные будут генерироваться.

5
CoolMind
421 / 404 / 65
Регистрация: 06.10.2012
Сообщений: 1,733
03.11.2014, 17:29 #2
NOSC, привет! Мельком глянул на ошибку и увидел, что у вас не создаётся таблица, потому что её название - null. Видимо, ошибочный код здесь:
Java
1
2
3
4
5
6
db.execSQL("create table "+ Data.table_name + " ("
                      + "_id integer primary key autoincrement," 
                      + "line_num text,"
                      + "line_name text,"
                      + "station_name text,"
                      + "cellid text" + ");");
Почему не создаётся и зачем вызывается, пока не знаю.
0
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
05.11.2014, 22:35  [ТС] #3
Цитата Сообщение от CoolMind Посмотреть сообщение
Почему не создаётся и зачем вызывается, пока не знаю.
Я попробую как до компьютера доберусь. Но когда я добавил код с курсором база уже была, возможно при старте activity не успевает эта переменная определиться, так как название таблицы формируется из названия оператора.
В общем спасибо, как проверю - отпишусь =)
0
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
14.11.2014, 18:52  [ТС] #4
Цитата Сообщение от NOSC Посмотреть сообщение
Сообщение от CoolMind
Почему не создаётся и зачем вызывается, пока не знаю.
Я попробую как до компьютера доберусь.
Собственно там ошибка была чуть в другом, немного все переделал, теперь есть явная проблема с курсором.
Имеем:
Метод в активити, который вызывается в onCreate
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
void dispalyList() {
          Cursor cursor = DbOpenHelper.getAll();
          String[] columns = new String[] {
            DbOpenHelper.LINE_NAME,
            DbOpenHelper.CELLID
          };
          int[] to = new int[] {
            R.id.station_txt,
            R.id.cellid_txt
          };
          dataAdapter = new SimpleCursorAdapter(MainActivity.this, R.layout.clayout, cursor, columns, to, 0);
          list_db.setAdapter(dataAdapter);
      }


Соответственно мой DbOpenHelper.getAll()
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
public static Cursor getAll() {
          Cursor mCursor = db.query(TABLE_NAME, new String[] {STATION_NAME,
                  CELLID}, 
            null, null, null, null, null);
         
          if (mCursor != null) {
           mCursor.moveToFirst();
          }
          return mCursor;
         }


Получаю на выходе:
Кликните здесь для просмотра всего текста
11-14 17:07:09.791: W/dalvikvm(17980): threadid=1: thread exiting with uncaught exception (group=0x41386930)
11-14 17:07:09.791: E/AndroidRuntime(17980): FATAL EXCEPTION: main
11-14 17:07:09.791: E/AndroidRuntime(17980): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.metroframe/com.example.metroframe.MainActivity}: java.lang.NullPointerException
11-14 17:07:09.791: E/AndroidRuntime(17980): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
11-14 17:07:09.791: E/AndroidRuntime(17980): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2357)
11-14 17:07:09.791: E/AndroidRuntime(17980): at android.app.ActivityThread.access$600(ActivityThread.java:153)
11-14 17:07:09.791: E/AndroidRuntime(17980): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
11-14 17:07:09.791: E/AndroidRuntime(17980): at android.os.Handler.dispatchMessage(Handler.java:99)
11-14 17:07:09.791: E/AndroidRuntime(17980): at android.os.Looper.loop(Looper.java:137)
11-14 17:07:09.791: E/AndroidRuntime(17980): at android.app.ActivityThread.main(ActivityThread.java:5226)
11-14 17:07:09.791: E/AndroidRuntime(17980): at java.lang.reflect.Method.invokeNative(Native Method)
11-14 17:07:09.791: E/AndroidRuntime(17980): at java.lang.reflect.Method.invoke(Method.java:511)
11-14 17:07:09.791: E/AndroidRuntime(17980): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
11-14 17:07:09.791: E/AndroidRuntime(17980): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
11-14 17:07:09.791: E/AndroidRuntime(17980): at dalvik.system.NativeStart.main(Native Method)
11-14 17:07:09.791: E/AndroidRuntime(17980): Caused by: java.lang.NullPointerException
11-14 17:07:09.791: E/AndroidRuntime(17980): at com.example.metroframe.DbOpenHelper.getAll(DbOpenHelper.java:36)
11-14 17:07:09.791: E/AndroidRuntime(17980): at com.example.metroframe.MainActivity.dispalyList(MainActivity.java:221)
11-14 17:07:09.791: E/AndroidRuntime(17980): at com.example.metroframe.MainActivity.onCreate(MainActivity.java:63)
11-14 17:07:09.791: E/AndroidRuntime(17980): at android.app.Activity.performCreate(Activity.java:5104)
11-14 17:07:09.791: E/AndroidRuntime(17980): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
11-14 17:07:09.791: E/AndroidRuntime(17980): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
11-14 17:07:09.791: E/AndroidRuntime(17980): ... 11 more


На дебаге видно что затык начинается при исполнении getAll(), но дальше не могу понять что не так.

Добавлено через 1 час 36 минут
Мда, муки продолжаются, теперь мой курсор выглядит так:
Java
1
2
3
4
5
6
7
    public  Cursor getAll() {
        
        String [] sqlSelect = {LINE_NUM, LINE_NAME, STATION_NAME, CELLID}; 
        Cursor c = db.query("stations", sqlSelect, null, null, null, null, null);
        c.moveToFirst();
        return c;
         }
И все вроде бы должно работать, но в логах получаю жалобу на строчку
Cursor c = db.query("stations", sqlSelect, null, null, null, null, null);
Кликните здесь для просмотра всего текста
11-14 18:48:25.017: E/AndroidRuntime(25001): FATAL EXCEPTION: main
11-14 18:48:25.017: E/AndroidRuntime(25001): java.lang.NullPointerException
11-14 18:48:25.017: E/AndroidRuntime(25001): at com.example.metroframe.DbOpenHelper.getAll(DbOpenHelper.java:44)

со всеми вытекающими.
Кто имел опыт - подскажите что не так пожалуйста
0
Spelcrawler
531 / 501 / 111
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
15.11.2014, 00:45 #5
Думаю, у вас db не инициализирована.
0
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
15.11.2014, 00:46  [ТС] #6
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Думаю, у вас db не инициализирована.
Проблема оказалась в курсоре. Я использовал стандартный SimpleCursorAdapter, пришлось сделать хоть и простенький, но свой - сразу все заработало.

Всем спасибо ;-)
0
15.11.2014, 00:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2014, 00:46
Привет! Вот еще темы с ответами:

Загрузка данных из SQLite для каждого пункта ListView - Программирование Android
Здравствуйте, у меня такая проблема, не могу сделать так что бы для каждого пункта списка выводилась соответствующая строка в БД в новой...

Замена цвета background с задержкой для ячейки ListView - Программирование Android
Здравствуйте! Я делаю приложение для тестов. Собственно хочу реализовать следующие. Есть ListView, при нажатии на ячейку если ответ...

Как задать черный цвет текста для ListView? - Программирование Android
Добрый день! Пытаюсь разобраться в этом исходнике https://github.com/nexes/Android-File-Manager Возник вопрос, как сделать текст на...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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