【问题标题】:Problems with populating a spinner from SQLITE database从 SQLITE 数据库填充微调器的问题
【发布时间】:2016-01-04 11:47:54
【问题描述】:

我是 android 开发新手,在微调器中加载数据库 SQLITE 值时遇到问题。我总是被强制关闭

这是我的代码

数据库处理程序.java

public void onCreate(SQLiteDatabase db) {
String creation_query5 = "CREATE TABLE food (name text primary key, calorie integer)";
db.execSQL(creation_query5);
}

 public ArrayList<String> getAllFood(){

    ArrayList<String> list=new ArrayList<String>();
    // Open the database for reading
    SQLiteDatabase db = this.getReadableDatabase();
    // Start the transaction.
    db.beginTransaction();


    try
    {

        String selectQuery = "SELECT * FROM food";
        Cursor cursor = db.rawQuery(selectQuery, null);
        if(cursor.getCount() >0)

        {
            while (cursor.moveToNext()) {
                // Add province name to arraylist
                String name= cursor.getString(cursor.getColumnIndex("name"));
                list.add(name);

            }


        }
        db.setTransactionSuccessful();

    }
    catch (SQLiteException e)
    {
        e.printStackTrace();

    }
    finally
    {
        db.endTransaction();
        // End the transaction.
        db.close();

        // Close database
    }
    return list;


}


public void insertFood(String pname, int cal) {

    // Open the database for writing
    SQLiteDatabase db = this.getWritableDatabase();
    // Start the transaction.
    db.beginTransaction();
    ContentValues values;


    try

    {
        values = new ContentValues();
        values.put("name", pname);
        values.put("calorie",cal);
        // Insert Row
        db.insert("food", null, values);
        // Insert into database successfully.
        db.setTransactionSuccessful();


    }
    catch (Exception e)
    {
        e.printStackTrace();

    }

    finally

    {
        db.endTransaction();
        // End the transaction.
        db.close();
        // Close database
    }
}

MainActivity.java (在创建方法中)

DatabaseHandler  db = new DatabaseHandler(getApplicationContext());
spinner=(Spinner) findViewById(R.id.spinner);
    tv=(TextView) findViewById(R.id.textView7);
    db.insertFood("potato",50);
    db.insertFood("tomato",1);
    ArrayList<String> list=db.getAllFood();
    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, R.id.text, list);
    spinner.setAdapter(adapter);

您能否检查我的代码并指导我哪里出错,任何帮助将不胜感激。

【问题讨论】:

  • 太有趣了,我们是人类,我们需要日志
  • 写你的activityName.this而不是getApplicationContext()
  • @Rah 我知道我可能看起来很傻,但是我怎样才能得到日志是 logcat
  • @jyomin tnx 我按你说的改了,我现在可以打开活动,但微调器是空的
  • 你不能复制粘贴你的 logcat 错误?

标签: android android-sqlite android-spinner


【解决方案1】:

如下重写你的代码

DatabaseHandler  db = new DatabaseHandler(TestActivity.this);
        db.insertFood("potato",50);
        db.insertFood("tomato",1);
        ArrayList<String> list=db.getAllFood();
        if(list != null)
            Log.e("LOG", list.toString());
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(TestActivity.this,
                android.R.layout.simple_spinner_dropdown_item, android.R.id.text1, list);
        spinner.setAdapter(adapter);

【讨论】:

    【解决方案2】:

    我已经为你创建了数据库类试试这个:

    package com.seasiainfotech.data;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    import java.util.ArrayList;
    
    /**
     * Created by jyomin on 1/4/2016.
     */
    public class DatabaseHelper extends SQLiteOpenHelper {
    
        //database name and version
        public static String DATABASENAME = "YourApp.sql"; // Database Name
        //first version was 33 which was released to client
        public static final int DATABASE_VERSION = 1;
        Context mContext;
    
        private static final String FOOD_TABLE = "Food";
        private static final String CALOIRE = "Calorie";
        private static final String NAME = "NAME";
        public static String CREATE_TABLE_FOOD = "CREATE TABLE "
                + FOOD_TABLE + "(" + NAME + " TEXT,"
                + CALOIRE + " TEXT" + ")";
    
    
        public DatabaseHelper(Context context) {
            super(context, DATABASENAME, null, DATABASE_VERSION);
            mContext = context;
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_TABLE_FOOD);
        }
    
    
        public ArrayList<String> getAllFoods() {
            ArrayList<String> list = new ArrayList<String>();
            // Open the database for reading
            SQLiteDatabase db = this.getReadableDatabase();
            Cursor mCursor = db.rawQuery("select * from " + FOOD_TABLE, null);
            if (mCursor.getCount() > 0) {
                while (mCursor.moveToNext()) {
                    list.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.NAME)));
                }
            }
            return list;
        }
    
    
        public void insertFood(String name,String catg){
            SQLiteDatabase db = this.getWritableDatabase();
            ContentValues contentValues = new ContentValues();
            contentValues.put(NAME, name);
            contentValues.put(CALOIRE, catg);
            db.insert(FOOD_TABLE, null, contentValues);
            db.close();
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + CREATE_TABLE_FOOD);
            onCreate(db);
        }
    }
    
    
    and in your activity class write this:
          DatabaseHelper mDb=new DatabaseHelper(yourActivity.this);
            mDb.insertfood("maggi","veg");
        //to get the list from db
              yourlist=mDb.getAllFoods();
    

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      相关资源
      最近更新 更多