Spinner没有被SQLite表填充

时间:2011-03-02 00:57:27

标签: android database sqlite android-sqlite android-spinner

我对qndroid很新,所以如果这个问题看起来很简单,请原谅我。

我正在尝试使用来自我正在从数据助手类创建的SQLite表中的信息来加载微调器。

该项目似乎加载了o.k.但是,SQLite tabe中没有任何信息加载到微调器中?

下面是代码。我感谢所提供的所有帮助。

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;
import 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;
    }
}

主xml文件

<?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>  

谢谢,

1 个答案:

答案 0 :(得分:1)

试试这段代码。

它对我有用。

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();

在我的适配器类

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