Сохранение значения из Spinner ов в базу SQLite
Сохранение значения из Spinner ов в базу SQLite
Помогите решить проблемку. Имеется несколько спиннеров, кнопка и база SQLite. При нажатии кнопки выбранные значения спиннеров (по одному значению из каждого спиннера) должны сохраниться в базу (в одну строку таблицы). Как можно это осуществить? Мне бы на конкретном примере показать, если можно
Последний раз редактировалось banitl 02 окт 2012, 16:23, всего редактировалось 1 раз.
Re: Сохранение значения из Spinner ов в базу SQLite
А вопрос в чем?
Re: Сохранение значения из Spinner ов в базу SQLite
После мучительных исследований получилось вот такое... Но почему-то не работает. Подскажите что и где изменить, пожалуйста.
Класс InfoDBAdapter.java
Класс PersonalInfo.java
Приложение удачно компилируется, в ЛОГ никаких ошибок не выдает. В эмуляторе приложение запускается. При сохранении выводит "Your info is saved successfully!". Сама база создается, но нет заполненная значениями таблица.
Класс 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
Код: Выделить всё
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();
}
}Re: Сохранение значения из Spinner ов в базу SQLite
Вы сохраняете значения спиннеров в переменные NameValue и GenderValue. Потом выводите сообщение, что все ок. Но при этом совсем нет кода работы с БД.
Вам надо создавать экземпляр InfoDBAdapter и с его помощью записывать данные.
Вам надо создавать экземпляр InfoDBAdapter и с его помощью записывать данные.
Re: Сохранение значения из Spinner ов в базу SQLite
Экземпляр InfoDBAdapter создать внутри InfoDBAdapter.java и вызвать в PersonalInfo.java?
Re: Сохранение значения из Spinner ов в базу SQLite
Создать в PersonalInfo и использовать в нем же. В качестве примера можете посмотреть урок 52, там примерно такая же схема.banitl писал(а):Экземпляр InfoDBAdapter создать внутри InfoDBAdapter.java и вызвать в PersonalInfo.java?
А вообще, если есть трудности с Java, то загляните сюда viewtopic.php?f=17&t=147. Гораздо легче потом Android пойдет.

