我正在尝试实现一个活动,该活动具有3个微调器(下拉列表),每个微调器由sqlite数据库中的不同表填充。 我设法创建了一个已正确填充的微调器,但是在创建其他两个并正确填充它们时遇到了麻烦。

到目前为止,这是我的主要活动:

public class MainActivity extends Activity implements OnClickListener, OnItemSelectedListener {

private DBManager data;

private SQLiteDatabase db;

private final String DB_NAME ="hanakolfein.s3db";

private Spinner spinner;

List list;

ArrayAdapter adapter;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

/*Spinner sp1, sp2, sp3;

sp1 = (Spinner) findViewById(R.id.spinner1);

sp2 = (Spinner) findViewById(R.id.spinner2);

sp3 = (Spinner) findViewById(R.id.spinner3);

sp1.setOnItemSelectedListener(null);

sp2.setOnItemSelectedListener(null);

sp3.setOnItemSelectedListener(null); */

data = new DBManager(this, DB_NAME);

db = data.openDataBase();

spinner = (Spinner) findViewById(R.id.spinner1);

spinner.setOnItemSelectedListener(this);

loadSpinner();

}

private void loadSpinner() {

Set set = data.getAllData();

List list = new ArrayList(set);

adapter = new ArrayAdapter(MainActivity.this,

android.R.layout.simple_spinner_item, list);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner.setAdapter(adapter);

spinner.setWillNotDraw(false);

}

@Override

public void onItemSelected(AdapterView< ? > parent, View view,

int position, long id) {

// TODO Auto-generated method stub

}

@Override

public void onNothingSelected(AdapterView< ? > parent) {

// TODO Auto-generated method stub

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

}

}

这是我的数据库管理器:

公共类DBManager扩展了SQLiteOpenHelper {

//Path to the device folder with databases

public static String DB_PATH;

//Database file name

public static String DB_NAME;

public SQLiteDatabase database;

public final Context context;

public final static int DB_VERSION = 6;

public SQLiteDatabase getDb() {

return database;

}

public DBManager(Context context, String databaseName) {

super(context, databaseName, null, DB_VERSION);

this.context = context;

//full path to the databases

String packageName = context.getPackageName();

DB_PATH = String.format("//data//data//%s//databases//", packageName);

DB_NAME = databaseName;

openDataBase();

}

//This piece of code will create a database if it’s not yet created

public void createDataBase() {

boolean dbExist = checkDataBase();

if (!dbExist) {

this.getReadableDatabase();

try {

copyDataBase();

} catch (IOException e) {

Log.e(this.getClass().toString(),"Copying error");

throw new Error("Error copying database!");

}

} else {

Log.i(this.getClass().toString(),"Database already exists");

}

}

//Performing a database existence check

private boolean checkDataBase() {

SQLiteDatabase checkDb = null;

try {

String path = DB_PATH + DB_NAME;

checkDb = SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READONLY);

} catch (SQLException e) {

Log.e(this.getClass().toString(),"Error while checking db");

}

//Android doesn’t like resource leaks, everything should

// be closed

if (checkDb != null) {

checkDb.close();

}

return checkDb != null;

}

//Method for copying the database

private void copyDataBase() throws IOException {

//Open a stream for reading from our ready-made database

//The stream source is located in the assets

InputStream externalDbStream = context.getAssets().open(DB_NAME);

//Path to the created empty database on your Android device

String outFileName = DB_PATH + DB_NAME;

//Now create a stream for writing the database byte by byte

OutputStream localDbStream = new FileOutputStream(outFileName);

//Copying the database

byte[] buffer = new byte[1024];

int bytesRead;

while ((bytesRead = externalDbStream.read(buffer)) > 0) {

localDbStream.write(buffer, 0, bytesRead);

}

//Don’t forget to close the streams

localDbStream.close();

externalDbStream.close();

}

public SQLiteDatabase openDataBase() throws SQLException {

String path = DB_PATH + DB_NAME;

if (database == null) {

createDataBase();

database = SQLiteDatabase.openDatabase(path, null,

SQLiteDatabase.OPEN_READWRITE);

}

return database;

}

@Override

public synchronized void close() {

if (database != null) {

database.close();

}

super.close();

}

public Set getAllData() {

Set set = new HashSet();

String selectQuery ="select * from cuisine";

SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.rawQuery(selectQuery, null);

if (cursor.moveToFirst()) {

do {

set.add(cursor.getString(1));

} while (cursor.moveToNext());

}

cursor.close();

db.close();

return set;

}

@Override

public void onCreate(SQLiteDatabase db) {}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}

}

"我在创建另外两个时遇到麻烦",您应该更详细地确切说明自己遇到的麻烦。

很好地创建第一个,我使用了loadSpinner内部的getAllData来填充它,在另外两个中,我是否还要再创建2个具有不同查询的getAllData? 我是否要创建另一个loadSpinner? 我不确定如何进行@Takendarkk

好吧,首先,您不应该从主线程查询数据库。

我建议按照此处所述使用装载程序。 在每种情况下,对于每个微调框,您可以根据需要设置任意数量的装载程序(只需确保为它们指定不同的ID)即可。

您需要清除传递给arrayadapter的那个arraylist。 因为当您使用第一个微调器时,您要调用gatAllData并将该数据存储在arraylist中,然后将其传递给arrayadapter。 下次使用第二个微调器时,您将执行相同的步骤,但它将连接到arraylist的先前条目。 因此,在调用getAllData之前,您需要清除数组列表。 它会解决您的问题。

java sqlite 创建_关于Java:创建3个由sqlite数据库填充的微调器相关推荐

  1. java swing 空白_用swing创建窗体运行后怎么一片空白,什么都没有

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我一边敲一边现学,不知道哪里错了,也是一样的空白 package homework; import javax.swing.*; import java. ...

  2. java核心教程_核心Java教程

    java核心教程 Welcome to Core Java Tutorial. I have written a lot on Core Java and Java EE frameworks. Th ...

  3. java 包命名_【Java】包的命名规则

    命名规范 包:所有单词的字母小写,之后每个单词用-隔开,如 org.nemo.demo 常量:所有单词的字母大写,之后每个单词用_隔开,如 FLAG 类:所有单词的首字母大写,如 TestJava p ...

  4. java array缓存_有java数组

    [JAVA零基础入门系列]Day10 Java中的数组 [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 D ...

  5. java new thread()_(一)java多线程之Thread

    Thread类 学习java线程的开发者,首先遇到的第一个类就是Thread,通过使用Thread类,我们就可以启动,停止,中断一个线程. 在同一个时间片里, 可能会有多个线程在执行, 每个线程都拥有 ...

  6. java 字符串包_包java字符串

    Java核心技术卷I基础知识3.6.3 不可变字符串 3.6.3 不可变字符串 String类没有提供用于修改字符串的方法.如果希望将greeting的内容修改为"Help!",不 ...

  7. java 正则表达式效验_正则表达式(Java版整理)

    基础 元字符 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 ^ 匹配字符串的开始 $ 匹配字符串的结束 \b 匹配字符串的结束 ...

  8. java path类_基于java Files类和Paths类的用法(详解)

    Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream; import java.nio.file.FileSystem ...

  9. java初始化数据报_初始化java原因

    虚拟机的类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类 即虚拟机的类加载机制. 在Java中,类型的加载.链接 ...

最新文章

  1. java7 javascript引擎_Java7中脚本引擎的一般用法,共三种方法获得JavaScript引擎:名称、文件扩展名、MIME类型 | 学步园...
  2. 微信公众平台开发 - 动手篇。使用weinxinFundation开始一个微信公众平台的开发
  3. 关于动态规划与备忘录方法的总结
  4. [NLP]--NLP programming tutorial
  5. 计算机原理之程序是怎么运行的
  6. 如何解决两个相邻的span中间有空隙
  7. gc机制 php7_PHP7垃圾回收机制详解(附GC处理完整流程图)
  8. 检测和校准实验室能力认可准则_CNAS-CL01:2018检测和校准实验室能力认可准则之管理体系...
  9. 胶水代码(glue code)的定义(粘合代码)
  10. HDOJ 1114 Piggy-Bank 【动态规划 完全背包】
  11. Acme CAD Converter 2019简体中文直装破解版
  12. PTP简介-IEEE1588协议
  13. 大华电子秤 手动变价方法
  14. C语言版数据结构计算顺序表中X的个数,设计算法。数据结构课后习题,定义顺序表,查找顺序表中X元素的个数。
  15. 51单片机流水灯画图打板焊元件历程
  16. 【论文阅读】A statistical significance of differences in classification accuracy of crop types using 。。。
  17. 动力节点『lol版』Java学习路线图(四)Javaweb阶段
  18. Google Chrome自定义新标签页
  19. 产品经理是做什么的?
  20. 半路接手项目,做好“沟通”很重要

热门文章

  1. Python入门学习指南--内附学习框架
  2. 2019年总结人工智能未来发展趋势
  3. 写完程序 看 蜡笔小新 的有木有
  4. 这6大核心技能,程序员升职加薪的利器
  5. 那些你不知道的程序员的多重身份
  6. 大一计算机在线考试,大一计算机考试题(含答案).pdf
  7. Hemberg-lab单细胞转录组数据分析(二)
  8. python购物车典例_Python实现的购物车功能示例
  9. python的魅力在哪_python的优势在哪
  10. python excel取列_python取excel表格第一列数据-python操作excel,使用xlrd模块,获取某一列数据的......