动态微调使用SQLite数据库 [英] Dynamic Spinner Using SQLite Database

查看:183
本文介绍了动态微调使用SQLite数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经能够两个微调器成功地连接到使用SimpleCursorAdapter数据库。但是,我需要做的第二选择微调依赖于第一选择微调

下面是我链接的数据:

 公共类epa_estimates_button延伸活动{
@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.epa_estimates);
    最后光标cYear;
    最后光标CMake的;
    最后的微调mMakeSpinner;
    最后的微调mModelSpinner;
    cYear =(光标)DataBaseHelper.getEPADataYear();
    this.startManagingCursor(cYear);    SimpleCursorAdapter scaYear =新SimpleCursorAdapter(这一点,R.layout.spinner_layout,cYear,新的String [] {} DataBaseHelper.EPA_COLUMN_ONE,新的INT [] {R.id.text1});
    scaYear.setDropDownViewResource(R.layout.spinner_dropdown);
    mYearSpinner =(微调)findViewById(R.id.yearSpinner);
    mYearSpinner.setAdapter(scaYear);    CMake的=(光标)DataBaseHelper.getEPADataMake();
    this.startManagingCursor(CMake的);    SimpleCursorAdapter scaMake =新SimpleCursorAdapter(这一点,R.layout.spinner_layout,CMake的,新的String [] {} DataBaseHelper.EPA_COLUMN_TWO,新的INT [] {R.id.text1});
    scaMake.setDropDownViewResource(R.layout.spinner_dropdown);
    mMakeSpinner =(微调)findViewById(R.id.makeSpinner);
    mMakeSpinner.setAdapter(scaMake);
}}

下面是我的DataBaseHelper

 公共类DataBaseHelper扩展SQLiteOpenHelper {
私人静态字符串DB_PATH =/data/data/org.application.ocdmpg/databases/;
私人静态字符串DB_NAME =ocd_mpg.mp3;
私人最终诠释DB_VERSION = 1;
私有静态SQLiteDatabase MYDATABASE;
私人最终上下文myContext;
私有静态最后弦乐EPA_TABLE_NAME =epa_data;
私有静态最后弦乐EPA_COLUMN_ID =_id;
公共DataBaseHelper(上下文的背景下){    超级(上下文,DB_NAME,空,1);
    this.myContext =背景;
}
    公共静态光标getEPADataYear()
{
    返回myDataBase.query(EPA_TABLE_NAME,//表名
            新的String [] {EPA_COLUMN_ID,EPA_COLUMN_ONE} //返回列的列表
            空,//过滤宣布要返回的行;格式化为SQL WHERE子句
            空值,
            EPA_COLUMN_ONE,//过滤宣布如何分组行;格式化为SQL GROUP BY子句
            空,//过滤宣布在光标移动到包括行组;格式化为SQL HAVING子句
            空值); //如何订购行;格式化为SQL ORDER BY子句
}
公共静态光标getEPADataMake()
{
    返回myDataBase.query(EPA_TABLE_NAME,新的String [] {
            EPA_COLUMN_ID,
            EPA_COLUMN_TWO,
            },
            空值,
            空值,
            EPA_COLUMN_TWO,
            空值,
            空值);
}}

我发现code为setOnItemSelectedListener并尝试添加我的code的数据链接到微调,但startManagingCursor方法和SimpleCursorAdapter构造给我一个错误为未定义。我应该使用一个ArrayAdapter来填充我的纺纱?还是有办法纠正下面的code?

  mYearSpinner.setOnItemSelectedListener(新OnItemSelectedListener(){
        @覆盖
        公共无效onItemSelected(适配器视图<> parentView,查看selectedItemView,INT位置,长的id){
            //你的code在这里
            CMake的=(光标)DataBaseHelper.getEPADataMake();
            this.startManagingCursor(CMake的);            SimpleCursorAdapter scaMake =新SimpleCursorAdapter(这一点,R.layout.spinner_layout,CMake的,新的String [] {} DataBaseHelper.EPA_COLUMN_TWO,新的INT [] {R.id.text1});
            scaMake.setDropDownViewResource(R.layout.spinner_dropdown);
            mMakeSpinner =(微调)findViewById(R.id.makeSpinner);
            mMakeSpinner.setAdapter(scaMake);
        }        @覆盖
        公共无效onNothingSelected(适配器视图<> parentView){
            //你的code在这里
        }        });


解决方案

更新根据您的修改和注释

您为 this.startManagingCursor调用(CMake的)需要更改为 startManagingCursor(CMake的) epa_estimates_button.this.startManagingCursor(CMake的),因为它是从一个内部类中正在作出(一个 OnItemSelectedListener )。它的工作原理没有'这个'(前一种情况),因为,基本上,Java的计算出它这个你的意思。它的工作原理与类名,因为这使得明确什么的Java会想通了为自己。但不合格的这个意味着你指的是内部类这个,这是行不通的。

非常相似,在你onItemSelectedListener,您的来电 startManagingCursor 需要被改写为:

  SimpleCursorAdapter scaMake =新SimpleCursorAdapter(epa_estimates_button.this,
    R.layout.spinner_layout,CMake的,新的String [] {} DataBaseHelper.EPA_COLUMN_TWO,
    新的INT [] {R.id.text1});

(我想你的数据库查询将需要工作 - 你似乎没有使用任何形式的WHERE子句限制'制作'结果到适当的一年,但如果你坚持在该得到的,请。张贴它作为一个问题。)

I've been able to successfully link two spinners to a database using a SimpleCursorAdapter. But, I need to make the second spinner selection dependant on the first spinner selection.

Here is how I linked the data:

    public class epa_estimates_button extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.epa_estimates);
    final Cursor cYear;
    final Cursor cMake;
    final Spinner mMakeSpinner;
    final Spinner mModelSpinner;
    cYear = (Cursor) DataBaseHelper.getEPADataYear();
    this.startManagingCursor(cYear);

    SimpleCursorAdapter scaYear = new SimpleCursorAdapter(this, R.layout.spinner_layout,cYear,new String[] {DataBaseHelper.EPA_COLUMN_ONE},new int[]{R.id.text1});
    scaYear.setDropDownViewResource(R.layout.spinner_dropdown);
    mYearSpinner = (Spinner) findViewById(R.id.yearSpinner);
    mYearSpinner.setAdapter(scaYear);

    cMake = (Cursor) DataBaseHelper.getEPADataMake();
    this.startManagingCursor(cMake);

    SimpleCursorAdapter scaMake = new SimpleCursorAdapter(this, R.layout.spinner_layout,cMake,new String[] {DataBaseHelper.EPA_COLUMN_TWO},new int[]{R.id.text1});
    scaMake.setDropDownViewResource(R.layout.spinner_dropdown);
    mMakeSpinner = (Spinner) findViewById(R.id.makeSpinner);
    mMakeSpinner.setAdapter(scaMake);
}}

Here is my DataBaseHelper

    public class DataBaseHelper extends SQLiteOpenHelper {
private static String DB_PATH = "/data/data/org.application.ocdmpg/databases/";
private static String DB_NAME = "ocd_mpg.mp3";
private final int DB_VERSION = 1;
private static SQLiteDatabase myDataBase; 
private final Context myContext;
private static final String EPA_TABLE_NAME = "epa_data";
private static final String EPA_COLUMN_ID = "_id";
public DataBaseHelper(Context context) {

    super(context, DB_NAME, null, 1);
    this.myContext = context;
}
    public static Cursor getEPADataYear() 
{
    return myDataBase.query(EPA_TABLE_NAME, //table name
            new String[] {EPA_COLUMN_ID, EPA_COLUMN_ONE}, //list of columns to return
            null, //filter declaring which rows to return; formatted as SQL WHERE clause
            null,
            EPA_COLUMN_ONE, //filter declaring how to group rows; formatted as SQL GROUP BY clause
            null, //filter declaring which row groups to include in cursor; formatted as SQL HAVING clause
            null); //how to order rows; formatted as SQL ORDER BY clause
}
public static Cursor getEPADataMake() 
{
    return myDataBase.query(EPA_TABLE_NAME, new String[] {
            EPA_COLUMN_ID,
            EPA_COLUMN_TWO,
            }, 
            null, 
            null, 
            EPA_COLUMN_TWO, 
            null, 
            null);
}}

I've found code for setOnItemSelectedListener and tried to add my code for linking the data to the spinner but the startManagingCursor method and SimpleCursorAdapter constructors give me an error as undefined. Should I use an ArrayAdapter to populate my spinners? Or is there a way to correct the code below?

        mYearSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            // your code here
            cMake = (Cursor) DataBaseHelper.getEPADataMake();
            this.startManagingCursor(cMake);

            SimpleCursorAdapter scaMake = new SimpleCursorAdapter(this, R.layout.spinner_layout,cMake,new String[] {DataBaseHelper.EPA_COLUMN_TWO},new int[]{R.id.text1});
            scaMake.setDropDownViewResource(R.layout.spinner_dropdown);
            mMakeSpinner = (Spinner) findViewById(R.id.makeSpinner);
            mMakeSpinner.setAdapter(scaMake);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
            // your code here
        }

        });

解决方案

Updated based on your edit and comments

Your call to this.startManagingCursor(cMake) needs to be changed to either startManagingCursor(cMake) or epa_estimates_button.this.startManagingCursor(cMake), since it's being made from within an inner class (an OnItemSelectedListener). It works without 'this' (the former case) because, well, basically, Java figures out which this you meant. And it works with the classname because that makes explicit what Java would have figured out for itself. But the unqualified this implies that you're referring to the inner class this, and that wouldn't work.

Very similarly, in your onItemSelectedListener, your call to startManagingCursor needs to be rewritten as:

SimpleCursorAdapter scaMake = new SimpleCursorAdapter(epa_estimates_button.this,
    R.layout.spinner_layout,cMake,new String[] {DataBaseHelper.EPA_COLUMN_TWO},
    new int[]{R.id.text1});

(I think your database queries are going to need work -- you don't seem to use any sort of WHERE clause to restrict the 'make' results to the appropriate year. But if you do get stuck on that, please post it as another question.)

这篇关于动态微调使用SQLite数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆