开发者

Spinner not being populated by SQLite table

i'm quite new to qndroid so please forgive me if this question seems quite straight forward.

i'm trying to load a spinner using information from a SQLite table i'm creating from the data helper class.

the project seems to load up o.k. however none of the information from the SQLite tabe loads into the spinner?

below is the code. I appreciate all help provided.

Notepadv1 CLASS

/*
 * Copyright (C) 2008 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.demo.notepad1;


import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class Notepadv1 extends ListActivity {
    public static final int INSERT_ID = Menu.FIRST;

    private int mNoteNumber = 1;
    private NotesDbAdapter mDbHelper;
    private TextView output;  

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try{
        setContentView(R.layout.main);
        }
        catch (Exception e)
        {
            e.getMessage();
        }
        mDbHelper = new NotesDbAdapter(this);
        mDbHelper.open();
        //createNote();
        output = (TextView) this.findViewById(R.id.out_text);
        output.setText("hello this is finally working");
      Spinner spinner = (Spinner) findViewById(R.id.widget38);

      Cursor c = mDbHelper.fetchAllNotes();

      int firstnameColumnIndex = c.getColumnIndexOrThrow 
      ("building"); 


      ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(
                this, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
         //spinner.setOnItemSelectedListener(new MyOnItemSelectedListener(this,adapter));

         if (c.moveToFirst()) { 
           do { 
                   adapter.add(c.getString(firstnameColumnIndex)) ;
           } 
           while (c.moveToNext()); 
           if (mDbHelper != null) { 
               mDbHelper.close(); 

       } 
           }
        //fillData();
    }

    //@Override
    //public boolean onCreateOptionsMenu(Menu menu) {
   //   boolean result = super.onCreateOptionsMenu(menu);
    //    menu.add(0, INSERT_ID, 0, R.string.menu_insert);
    //    return result;
   // }

   // @Override
  //  public boolean onOptionsItemSelected(MenuItem item) {
   //   switch (item.getItemId()) {
   //     case INSERT_ID:
   //         createNote();
    //        return true;
    //    }
   //     return super.onOptionsItemSelected(item);
    //}

    private void createNote() {
        String noteName = "Note " + mNoteNumber++;
        mDbHelper.fetchNote();
        //fillData();
    }

    private void fillData() {
        // Get all of the notes from the database and create the item list
        Cursor c = mDbHelper.fetchAllNotes();
        startManagingCursor(c);

        String[] from = new String[] { NotesDbAdapter.KEY_TITLE };
        int[] to = new int[] { R.id.text1 };

        // Now create an array adapter and set it to display using our row
        SimpleCursorAdapter notes =
            new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
        setListAdapter(notes);
    }
}

NotesDbAdapter CLASS

/*
 * Copyright (C) 2008 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.android.demo.notepad1;

import android.content.ContentValues;
import android.content.Context;
impo开发者_如何学Gort android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * Simple notes database access helper class. Defines the basic CRUD operations
 * for the notepad example, and gives the ability to list all notes as well as
 * retrieve or modify a specific note.
 * 
 * This has been improved from the first version of this tutorial through the
 * addition of better error handling and also using returning a Cursor instead
 * of using a collection of inner classes (which is less scalable and not
 * recommended).
 */
public class NotesDbAdapter {

    public static final String KEY_TITLE = "building";
    public static final String KEY_BODY = "body";
    public static final String KEY_ROWID = "_id";

    private static final String TAG = "NotesDbAdapter";
    private DatabaseHelper mDbHelper;
    private SQLiteDatabase mDb;

    /**
     * Database creation sql statement
     */
    private static final String DATABASE_CREATE =
        "create table campus (_id integer primary key autoincrement, building varchar(20), lat double, lon double);";

    private static final String DATABASE_NAME = "example";
    private static final String DATABASE_TABLE = "campus";
    private static final int DATABASE_VERSION = 2;

    private final Context mCtx;

    private static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {

            db.execSQL(DATABASE_CREATE);
            db.execSQL( "insert into campus values('Calcutta House',51.515838,-0.07361); "
                            + "insert into campus values('Central House',51.514113,-0.074981); "
                            + "insert into campus values('Commercial Road',51.514948,-0.068468); "
                            + "insert into campus values('Goulston Street',51.516627,-0.075244); "
                            + "insert into campus values('Jewry Steet',51.51294,-0.076612); "
                            + "insert into campus values('Students Union',51.51533,-0.074096); "
                            + "insert into campus values('Whitechapel High Street',51.514756,-0.073262); "
                            + "insert into campus values('The Womens Library',51.515838,-0.07361);");

        }

        @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 notes");
            onCreate(db);
        }
    }

    /**
     * Constructor - takes the context to allow the database to be
     * opened/created
     * 
     * @param ctx the Context within which to work
     */
    public NotesDbAdapter(Context ctx) {
        this.mCtx = ctx;
    }

    /**
     * Open the notes database. If it cannot be opened, try to create a new
     * instance of the database. If it cannot be created, throw an exception to
     * signal the failure
     * 
     * @return this (self reference, allowing this to be chained in an
     *         initialization call)
     * @throws SQLException if the database could be neither opened or created
     */
    public NotesDbAdapter open() throws SQLException {
        mDbHelper = new DatabaseHelper(mCtx);
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        mDbHelper.close();
    }


    /**
     * Create a new note using the title and body provided. If the note is
     * successfully created return the new rowId for that note, otherwise return
     * a -1 to indicate failure.
     * 
     * @param title the title of the note
     * @param body the body of the note
     * @return rowId or -1 if failed
     */
    public long createNote(String title, String body) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_TITLE, title);
        initialValues.put(KEY_BODY, body);

        return mDb.insert(DATABASE_TABLE, null, initialValues);
    }

    /**
     * Delete the note with the given rowId
     * 
     * @param rowId id of note to delete
     * @return true if deleted, false otherwise
     */
    public boolean deleteNote(long rowId) {

        return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
    }

    /**
     * Return a Cursor over the list of all notes in the database
     * 
     * @return Cursor over all notes
     */
    public Cursor fetchAllNotes() {

        return mDb.query(DATABASE_TABLE, new String[] {"building", "lon",
                "lat"}, null, null, null, null, null);
    }

    /**
     * Return a Cursor positioned at the note that matches the given rowId
     * 
     * @param rowId id of note to retrieve
     * @return Cursor positioned to matching note, if found
     * @throws SQLException if note could not be found/retrieved
     */
    public Cursor fetchNote() throws SQLException {

        Cursor mCursor =

            mDb.query(true, DATABASE_TABLE, new String[] {"building",
                    "lon", "lat"}, "building = 'Commercial Road'", null,
                    null, null, null, null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;

    }

    /**
     * Update the note using the details provided. The note to be updated is
     * specified using the rowId, and it is altered to use the title and body
     * values passed in
     * 
     * @param rowId id of note to update
     * @param title value to set note title to
     * @param body value to set note body to
     * @return true if the note was successfully updated, false otherwise
     */
    public boolean updateNote(long rowId, String title, String body) {
        ContentValues args = new ContentValues();
        args.put(KEY_TITLE, title);
        args.put(KEY_BODY, body);

        return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
    }
}

main xml FILE

<?xml version="1.0" encoding="utf-8"?>  
   <LinearLayout xmlns:android=  
      "http://schemas.android.com/apk/res/android"  
       android:orientation="vertical"   
       android:layout_width="fill_parent"  
       android:layout_height="fill_parent">  
     <TextView android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text=" " />  
        <TextView android:id="@+id/out_text" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/no_notes"/>
          <Spinner
android:id="@+id/widget38"
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
>
</Spinner>
   </LinearLayout>  

thanks,


Try this code.

It works for me.

AdapterCountries = new ArrayAdapter<CharSequence>(this,
                         android.R.layout.simple_spinner_item);
                         AdapterCountries
                         .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                         spin.setAdapter(AdapterCountries);
                         spin.setOnItemSelectedListener(new MyOnItemSelectedListener());




              allElementDetails.clear();
              db1.open();
               // long id;


                Cursor cursor = db1.getAllTitles1();
                while (cursor.moveToNext())
                {


                    results=cursor.getString(2);


                    AdapterCountries.add(results);

                }
                db1.close();

In My Adapter class

public Cursor getAllTitles1() 
    {
        return db.query(DATABASE_TABLE1, new String[] {
                KEY_ROWID,
                DISHNAME,
                CATEGORY,
                DESCRIPTION,
                IMAGE}, 
                null, 
                null, 
                null, 
                null, 
                null);
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜