Загрузка данных в spinner из SQlite базы

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Timurovic
Сообщения: 12
Зарегистрирован: 18 сен 2012, 16:42

Загрузка данных в spinner из SQlite базы

Сообщение Timurovic » 26 сен 2013, 16:17

Есть у меня 1 (одна) база с 2 таблицами:
1. _id,brand_name (таблица marks)
2. _id,brand_model,brandid (таблица models)

Сами spinner'ы располагаются на activity, которое вызывается из главного activity.

В первый spinner выводиться brand_name из таблицы marks, во второй spinner brand_model из таблицы models.

Вот код, где я пытаюсь загрузить в spinner данные

Код: Выделить всё

package ru.auto.example;
import java.util.List;import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.provider.SyncStateContract.Constants;
import android.support.v4.widget.CursorAdapter;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
public class MrMd extends Activity implements OnItemSelectedListener {

SQLiteDatabase auto;
Spinner spnMdl,spnMrk,spnYear;
EditText edtDtlMrMd, edtPhoneMrMd, edtDvgMrMd;
Button btnOrderMrMd;


@SuppressWarnings("deprecation")
@Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.mr_md);
          
          
                // выпадающие списки
                spnMdl = (Spinner) findViewById(R.id.spnMdl);
                spnMrk = (Spinner) findViewById(R.id.spnMrk);
                spnYear = (Spinner) findViewById(R.id.spnYear);
          
                // текстовые поля
                edtDtlMrMd = (EditText) findViewById(R.id.edtDtlMrMd);
                edtPhoneMrMd = (EditText) findViewById(R.id.edtPhoneMrMd);
                edtDvgMrMd = (EditText) findViewById(R.id.edtDvgMrMd);
          
                // кнопка Заказать
                btnOrderMrMd = (Button) findViewById(R.id.btnOrderMrMd);
          
                //Установка слушателя для выпадающего списка
                spnMdl.setOnItemSelectedListener(new  OnItemSelectedListener(){
                
                 public void onItemSelected(AdapterView<?> parent, View v, int position,
                   long id) {
                  Toast.makeText(getBaseContext(), "Model", Toast.LENGTH_LONG).show();
                 }   @Override
   public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
  
   }
                
                });
           spnMrk.setOnItemSelectedListener(this);
           spnYear.setOnItemSelectedListener(this);
          
           loadSpinnerData();
          
           // Создаем адаптер ArrayAdapter с помощью массива строк и стандартной разметки элемета spinner
           ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
           R.array.year, android.R.layout.simple_spinner_item);
          
           // Определяем разметку для использования при выборе элемента
           adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
          
           // Применяем адаптер к элементу spinner
           spnYear.setAdapter(adapter);
        
}

private void loadSpinnerData() {
  // TODO Auto-generated method stub
   AutoParts db = new AutoParts(getApplicationContext());
  
                 // Spinner Drop down elements
                 List<String> lables = db.getAllLabels();

                 // Creating adapter for spinner
                 ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
                                 android.R.layout.simple_spinner_item, lables);

                 // Drop down layout style - list view with radio button
                 dataAdapter
                                 .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                 // attaching data adapter to spinner
                 spnMrk.setAdapter(dataAdapter);
}
@Override
public void onItemSelected(AdapterView<?> parent, View v, int position,
   long id) {
  switch(parent.getId()){
  case R.id.spnYear:
  
                
   break;
  
  case R.id.spnMrk:
  
   break;
  }
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
  // TODO Auto-generated method stub

}


}
вот код, где я работаю с базой:

Код: Выделить всё

package ru.auto.example;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class AutoParts extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "auto_parts.sqlite";
private static final int DATABASE_VERSION = 1;
public static final String TABLE_NAME = "marks";
  
  
         // Labels Table Columns names
         private static final String KEY_ID = "_id";
         private static final String KEY_NAME = "brand_name";
  
         public AutoParts(Context context) {
   super(context, DATABASE_NAME, null, DATABASE_VERSION);
   // TODO Auto-generated constructor stub
  }
         // Creating Tables
         @Override
         public void onCreate(SQLiteDatabase db) {
                 // Category table create query
          
         }
  
         // Upgrading database
         @Override
         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                 // Drop older table if existed
        
         }
        
         public List<String> getAllLabels(){
                 List<String> labels = new ArrayList<String>();
                
                 // Select All Query
                 String selectQuery = "SELECT  * FROM " + TABLE_NAME;
          
                 SQLiteDatabase db = this.getReadableDatabase();
                 Cursor cursor = db.rawQuery(selectQuery, null);
          
                 // looping through all rows and adding to list
                 if (cursor.moveToFirst()) {
                         do {
                                 labels.add(cursor.getString(1));
                         } while (cursor.moveToNext());
                 }
                
                 // closing connection
                 cursor.close();
                 db.close();
                
                 // returning lables
                 return labels;
         }
}
Я не много не понимаю в чём проблема.
Буду рад, если кто нибудь укажет мне где я ошибся.
Заранее благодарю
Вложения
Безымянный.png
Безымянный.png (67.76 КБ) 9120 просмотров

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: Загрузка данных в spinner из SQlite базы

Сообщение adarash » 26 сен 2013, 16:31

Если выводится что-то не то значит в базу заливается что-то не то. Проверь базу. Открой её каким нибудь редактором и еще... Даже если точно знаешь,под каким индексом выводится столбец все равно делать стоит примерно так cursor.getString(cursor.getColumnIndex("имя_столбца"));

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Загрузка данных в spinner из SQlite базы

Сообщение KamiSempai » 26 сен 2013, 16:35

Я тоже не понимаю в чем проблема. Есть программа, она запускается, ошибки не вылетают, все замечательно.
Может для начала опишете как должно быть и где именно проблема?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Timurovic
Сообщения: 12
Зарегистрирован: 18 сен 2012, 16:42

Re: Загрузка данных в spinner из SQlite базы

Сообщение Timurovic » 26 сен 2013, 17:00

KamiSempai писал(а):Я тоже не понимаю в чем проблема. Есть программа, она запускается, ошибки не вылетают, все замечательно.
Может для начала опишете как должно быть и где именно проблема?
Простите за мою не внимательность.

В верхний spinner должны загружаться данные столбца brand_name из таблицы marks

Ошибки вылетают:
  • 09-26 13:54:43.409: E/AndroidRuntime(410): FATAL EXCEPTION: main
    09-26 13:54:43.409: E/AndroidRuntime(410): java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.auto.example/ru.auto.example.MrMd}: android.database.sqlite.SQLiteException: no such table: marks: , while compiling: SELECT * FROM marks
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.os.Handler.dispatchMessage(Handler.java:99)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.os.Looper.loop(Looper.java:123)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.app.ActivityThread.main(ActivityThread.java:4627)
    09-26 13:54:43.409: E/AndroidRuntime(410): at java.lang.reflect.Method.invokeNative(Native Method)
    09-26 13:54:43.409: E/AndroidRuntime(410): at java.lang.reflect.Method.invoke(Method.java:521)
    09-26 13:54:43.409: E/AndroidRuntime(410): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    09-26 13:54:43.409: E/AndroidRuntime(410): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    09-26 13:54:43.409: E/AndroidRuntime(410): at dalvik.system.NativeStart.main(Native Method)
    09-26 13:54:43.409: E/AndroidRuntime(410): Caused by: android.database.sqlite.SQLiteException: no such table: marks: , while compiling: SELECT * FROM marks
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315)
    09-26 13:54:43.409: E/AndroidRuntime(410): at ru.auto.example.AutoParts.getAllLabels(AutoParts.java:43)
    09-26 13:54:43.409: E/AndroidRuntime(410): at ru.auto.example.MrMd.loadSpinnerData(MrMd.java:78)
    09-26 13:54:43.409: E/AndroidRuntime(410): at ru.auto.example.MrMd.onCreate(MrMd.java:59)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    09-26 13:54:43.409: E/AndroidRuntime(410): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    09-26 13:54:43.409: E/AndroidRuntime(410): ... 11 more
Сама база существует, открываю SQLite Expert Personal
Вложения
таблица marks
таблица marks
marks.jpg (308.1 КБ) 9114 просмотров
Последний раз редактировалось Timurovic 26 сен 2013, 17:01, всего редактировалось 1 раз.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Загрузка данных в spinner из SQlite базы

Сообщение Foenix » 26 сен 2013, 17:00

Ошибка простая, таблица marks отсутствует на устройстве.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Timurovic
Сообщения: 12
Зарегистрирован: 18 сен 2012, 16:42

Re: Загрузка данных в spinner из SQlite базы

Сообщение Timurovic » 26 сен 2013, 17:06

Foenix писал(а):Ошибка простая, таблица marks отсутствует на устройстве.
Но если я смотрю через DDMS по пути "/data/data/ru.auto.example/databases/", то там лежит "auto_parts.sqlite"
Вложения
БД
БД
auto_parts.jpg (811.05 КБ) 9113 просмотров

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Загрузка данных в spinner из SQlite базы

Сообщение Foenix » 26 сен 2013, 17:16

ну и что, а таблицы в ней нету. Скачайте ее на комп и посмотрите своим менеджером.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Timurovic
Сообщения: 12
Зарегистрирован: 18 сен 2012, 16:42

Re: Загрузка данных в spinner из SQlite базы

Сообщение Timurovic » 26 сен 2013, 17:29

Foenix писал(а):ну и что, а таблицы в ней нету. Скачайте ее на комп и посмотрите своим менеджером.
И в самом деле, спасибо вам.
Пойду искать как скопировать базу на устройство

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Загрузка данных в spinner из SQlite базы

Сообщение Foenix » 26 сен 2013, 17:39

вначале нужно записать ее в папку assets, затем действовать как с файлом.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить