Сохранение значения из Spinner ов в базу SQLite

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
banitl
Сообщения: 6
Зарегистрирован: 02 окт 2012, 13:41

Сохранение значения из Spinner ов в базу SQLite

Сообщение banitl » 02 окт 2012, 13:51

Помогите решить проблемку. Имеется несколько спиннеров, кнопка и база SQLite. При нажатии кнопки выбранные значения спиннеров (по одному значению из каждого спиннера) должны сохраниться в базу (в одну строку таблицы). Как можно это осуществить? Мне бы на конкретном примере показать, если можно
Последний раз редактировалось banitl 02 окт 2012, 16:23, всего редактировалось 1 раз.

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Сохранение значения из Spinner ов в базу SQLite

Сообщение powercat » 02 окт 2012, 14:06

А вопрос в чем?

banitl
Сообщения: 6
Зарегистрирован: 02 окт 2012, 13:41

Re: Сохранение значения из Spinner ов в базу SQLite

Сообщение banitl » 02 окт 2012, 16:37

После мучительных исследований получилось вот такое... Но почему-то не работает. Подскажите что и где изменить, пожалуйста.

Класс InfoDBAdapter.java

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

package main.page;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
@SuppressWarnings("unused")
public class InfoDBAdapter
{
    public static final String KEY_ROWID = "_id";
    public static final String KEY_NAME = "name";
    public static final String KEY_GENDER = "gender";    private static final String TAG = "InfoDBAdapter";
    private static final String DATABASE_NAME = "AnniversaryDB";
    private static final String DATABASE_TABLE = "personalInfo";
    private static final int DATABASE_VERSION = 2;    private static final String DATABASE_CREATE = "create table personalInfo (_id integer primary key autoincrement, "
            + "name text not null, gender text not null);";
    private final Context context;    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;
    public InfoDBAdapter(Context ctx)
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }    private static class DatabaseHelper extends SQLiteOpenHelper
    {
        DatabaseHelper(Context context)
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        @Override
        public void onCreate(SQLiteDatabase db)
        {
            try
            {
                db.execSQL(DATABASE_CREATE);
            } catch (SQLException e)
            {
                e.printStackTrace();
            }
                    }// end onCreate()
      
          
          
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
        {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS personalInfo");
            onCreate(db);
        }// end onUpgrade()    }// end DatabaseHelper
    // ---opens the database---
        public InfoDBAdapter open() throws SQLException
        {
            db = DBHelper.getWritableDatabase();
            return this;
        }// end open()        // ---closes the database---
        public void close()
        {
            DBHelper.close();
        }// end close()
        // ---insert a contact into the database---
        public long insertContact(String name, String gender)
        {
            ContentValues values = new ContentValues();
            values.put(KEY_NAME, name);
            values.put(KEY_GENDER, gender);
           return db.insert(DATABASE_TABLE, null, values);
        }// end insertContact()        // ---deletes a particular contact---
        public boolean deleteContact(long rowId)
        {
            return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
        }// end deleteContact()
        // ---retrieves all the contacts---
        public Cursor getAllContacts()
        {
            return db.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_NAME,
                    KEY_GENDER}, null, null, null, null, null);
        }// end getAllContacts()        // ---retrieves a particular contact---
        public Cursor getContact(long rowId) throws SQLException
        {
            Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {
                    KEY_ROWID, KEY_NAME, KEY_GENDER }, KEY_ROWID + "=" + rowId,
                    null, null, null, null, null);
            if (mCursor != null)
            {
                mCursor.moveToFirst();
            }
            return mCursor;
        }// end getContact()
        // ---updates a contact---
        public boolean updateContact(long rowId, String name, String gender)
        {
            ContentValues args = new ContentValues();
            args.put(KEY_NAME, name);
            args.put(KEY_GENDER, gender);
            return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
        }// end updateContact()}//end DBAdapter
Класс PersonalInfo.java

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

package main.page;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.Toast;

@SuppressWarnings("unused")
public class PersonalInfo extends Activity
{
    Button btnSave;
    Spinner nameSpinner1, nameSpinner2;



    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {          
        Spinner nameSpinner;
        ArrayAdapter<String> adapter1;

        Spinner genderSpinner;
        ArrayAdapter<String> adapter2;

        String[] names= {"Kanak Priya", "Michelle Lam", "Natasha Akhbar", "Joan Tang", "Teo Kin Hua", "David Yeo"};
        String[] gender={"Male","Female"};
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_personal_info);      

        nameSpinner = (Spinner) findViewById(R.id.nameSpinner1);
        genderSpinner = (Spinner) findViewById(R.id.nameSpinner2);

         adapter1 = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, names);
        nameSpinner.setAdapter(adapter1);
        
         adapter2 = new ArrayAdapter<String>(this,
         android.R.layout.simple_spinner_item, gender);
        genderSpinner.setAdapter(adapter2);



           Button btnSave = (Button) findViewById(R.id.btnSave);
           btnSave.setOnClickListener(new OnClickListener()
                {
                    public void onClick(View v)
                    {

                        Spinner nameSpinner = (Spinner) findViewById(R.id.nameSpinner1);
                        String NameValue = nameSpinner.getSelectedItem().toString();

                        Spinner genderSpinner = (Spinner) findViewById(R.id.nameSpinner2);
                        String GenderValue = genderSpinner.getSelectedItem().toString();

                        Toast.makeText(getBaseContext(),
                                "Your info is saved successfully!",
                                Toast.LENGTH_SHORT).show();
                    }
                });          
    }//end onCreate

    public void CopyDB(InputStream inputStream,
            OutputStream outputStream)
            throws IOException
        {
                //---copy 1K bytes at a time---
                byte[] buffer = new byte[1024];
                int length;
                while ((length = inputStream.read(buffer)) > 0)
                {
                    outputStream.write(buffer, 0, length);
                }
                inputStream.close();
                outputStream.close();
        }

    public void DisplayContact(Cursor c)
    {
        Toast.makeText(
                this,
                 "id: " + c.getString(0)
                    + "\n" + "Full Name " + c.getString(1)
                    + "\n" + "Gender  " + c.getString(2), Toast.LENGTH_LONG).show();        
    }

}
Приложение удачно компилируется, в ЛОГ никаких ошибок не выдает. В эмуляторе приложение запускается. При сохранении выводит "Your info is saved successfully!". Сама база создается, но нет заполненная значениями таблица.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Сохранение значения из Spinner ов в базу SQLite

Сообщение damager82 » 03 окт 2012, 11:55

Вы сохраняете значения спиннеров в переменные NameValue и GenderValue. Потом выводите сообщение, что все ок. Но при этом совсем нет кода работы с БД.
Вам надо создавать экземпляр InfoDBAdapter и с его помощью записывать данные.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

banitl
Сообщения: 6
Зарегистрирован: 02 окт 2012, 13:41

Re: Сохранение значения из Spinner ов в базу SQLite

Сообщение banitl » 03 окт 2012, 13:26

Экземпляр InfoDBAdapter создать внутри InfoDBAdapter.java и вызвать в PersonalInfo.java?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Сохранение значения из Spinner ов в базу SQLite

Сообщение damager82 » 03 окт 2012, 17:15

banitl писал(а):Экземпляр InfoDBAdapter создать внутри InfoDBAdapter.java и вызвать в PersonalInfo.java?
Создать в PersonalInfo и использовать в нем же. В качестве примера можете посмотреть урок 52, там примерно такая же схема.

А вообще, если есть трудности с Java, то загляните сюда viewtopic.php?f=17&t=147. Гораздо легче потом Android пойдет.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Ответить