dimanche 15 mars 2015

Cannot populate Spinner from SQLite DB

I've went through a couple tutorials, trying to populate a spinner from a local SQLite database. I have made a class that successfully inserts items into the database but when I try to populate the spinner, it seems to fail when I try to attach the data to the spinner (but what that data is exactly, I'm not sure..haha) I have tried multiple ways to do this but I get the same error each time. Can anyone shed some light as to why this may be happening, or a possible solution is, I would greatly appreciate it.


My Spinner on postreview.xml:



<Spinner
android:id="@+id/category_spinner"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_marginRight="15dp"
android:layout_below="@+id/category_label"
android:layout_marginLeft="15dp"
android:textSize="8dp"
android:prompt="@string/spinner_title"
/>


My review page activity:



package ca.nait.kerickson16;

import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class PostReview extends Activity implements OnClickListener
{
// Spinner element
Spinner categorySelect;

DBManager db = new DBManager(this);
static final String TAG = "PostReview";
@Override
protected void onCreate(Bundle savedInstanceState)
{
categorySelect = (Spinner) findViewById(R.id.category_spinner);
loadSpinnerCategories();

super.onCreate(savedInstanceState);
setContentView(R.layout.postreview);
}

public void onClick(View view)
{


}

public void loadSpinnerCategories()
{
// database handler
db = new DBManager(PostReview.this);
Log.d(TAG,"New DB Handler");
// Spinner Drop down elements
List<String> categories = db.getAllCategories();
Log.d(TAG,"Got List of Categories");

// Creating adapter for spinner
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, categories);
Log.d(TAG,"Created Adapter for spinner");

// Drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Log.d(TAG,"list view with radio button");
// attaching data adapter to spinner
categorySelect.setAdapter(dataAdapter);
}


}


My DB Handler file: package ca.nait.kerickson16;



import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;

public class DBManager extends SQLiteOpenHelper
{
// global variables & constants
static final String TAG = "DBManager";
static final String DB_NAME = "hotOrNot.db";
static final int DB_VERSION = 1;
static final String TABLE = "hotOrNot";
static final String C_ID = BaseColumns._ID;
static final String C_CATEGORY = "category";


// Constructor
public DBManager(Context context)
{
super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db)
{
String sql = "create table " + TABLE + " (" + C_ID + " int primary key, " + C_CATEGORY + " varchar(32))";
db.execSQL(sql);
Log.d(TAG,sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("drop table if exists " + TABLE);
Log.d(TAG, "in onUpdated()");
onCreate(db);
}


public void insertCategory(String categoryName)
{

Log.d(TAG, "in insert DB method");


SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(C_CATEGORY, categoryName);
database.insert(TABLE, null, values);
database.close();
}

public List<String> getAllCategories()
{
List<String> categories = new ArrayList<String>();


// String[] projection = {
// C_CATEGORY
// };
//
//
// SQLiteDatabase db = this.getReadableDatabase();
// Cursor cursor = db.query(TABLE, projection, null, null, null, null, C_CATEGORY + " DESC");
//
// // looping through all rows and adding to list
// if (cursor.moveToFirst())
// {
// do
// {
// categories.add(cursor.getString(0));
// } while (cursor.moveToNext());
// }
//
// // closing connection
// cursor.close();
// db.close();
//
// // returning categories
// return categories;

// Select All Query
String selectQuery = "SELECT * FROM " + TABLE;

SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);

// looping through all rows and adding to list
if (cursor.moveToFirst())
{
do
{
categories.add(cursor.getString(1));
} while (cursor.moveToNext());
}

// closing connection
cursor.close();
db.close();

// returning
return categories;
}

}


Any help would be greatly appreciated!!


Aucun commentaire:

Enregistrer un commentaire