2011-03-02 6 views
-2

저는 qndroid에 새로운 것이므로이 문제가 아주 솔직하게 보인다면 저에게 용서해주십시오.Android 스피너가 SQLite 테이블에 채워지지 않습니다

나는 데이터 도우미 클래스에서 만드는 SQLite 테이블의 정보를 사용하여 회 전자를로드하려고합니다.

프로젝트가 o.k를로드하는 것 같습니다. 그러나 SQLite tabe의 정보는 회 전자에로드되지 않습니다.

아래 코드는 제공된 모든 도움에 감사드립니다.

Notepadv1 클래스

/* 
* 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의 클래스

/* 
* 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

이 코드를 사용해보십시오.

나를 위해 작동합니다. 내 어댑터 클래스에서

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); 
    } 
관련 문제