java sqlite 创建_关于Java:创建3个由sqlite数据库填充的微调器
我正在尝试实现一个活动,该活动具有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数据库填充的微调器相关推荐
- java swing 空白_用swing创建窗体运行后怎么一片空白,什么都没有
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我一边敲一边现学,不知道哪里错了,也是一样的空白 package homework; import javax.swing.*; import java. ...
- java核心教程_核心Java教程
java核心教程 Welcome to Core Java Tutorial. I have written a lot on Core Java and Java EE frameworks. Th ...
- java 包命名_【Java】包的命名规则
命名规范 包:所有单词的字母小写,之后每个单词用-隔开,如 org.nemo.demo 常量:所有单词的字母大写,之后每个单词用_隔开,如 FLAG 类:所有单词的首字母大写,如 TestJava p ...
- java array缓存_有java数组
[JAVA零基础入门系列]Day10 Java中的数组 [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 D ...
- java new thread()_(一)java多线程之Thread
Thread类 学习java线程的开发者,首先遇到的第一个类就是Thread,通过使用Thread类,我们就可以启动,停止,中断一个线程. 在同一个时间片里, 可能会有多个线程在执行, 每个线程都拥有 ...
- java 字符串包_包java字符串
Java核心技术卷I基础知识3.6.3 不可变字符串 3.6.3 不可变字符串 String类没有提供用于修改字符串的方法.如果希望将greeting的内容修改为"Help!",不 ...
- java 正则表达式效验_正则表达式(Java版整理)
基础 元字符 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 ^ 匹配字符串的开始 $ 匹配字符串的结束 \b 匹配字符串的结束 ...
- java path类_基于java Files类和Paths类的用法(详解)
Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream; import java.nio.file.FileSystem ...
- java初始化数据报_初始化java原因
虚拟机的类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类 即虚拟机的类加载机制. 在Java中,类型的加载.链接 ...
最新文章
- java7 javascript引擎_Java7中脚本引擎的一般用法,共三种方法获得JavaScript引擎:名称、文件扩展名、MIME类型 | 学步园...
- 微信公众平台开发 - 动手篇。使用weinxinFundation开始一个微信公众平台的开发
- 关于动态规划与备忘录方法的总结
- [NLP]--NLP programming tutorial
- 计算机原理之程序是怎么运行的
- 如何解决两个相邻的span中间有空隙
- gc机制 php7_PHP7垃圾回收机制详解(附GC处理完整流程图)
- 检测和校准实验室能力认可准则_CNAS-CL01:2018检测和校准实验室能力认可准则之管理体系...
- 胶水代码(glue code)的定义(粘合代码)
- HDOJ 1114 Piggy-Bank 【动态规划 完全背包】
- Acme CAD Converter 2019简体中文直装破解版
- PTP简介-IEEE1588协议
- 大华电子秤 手动变价方法
- C语言版数据结构计算顺序表中X的个数,设计算法。数据结构课后习题,定义顺序表,查找顺序表中X元素的个数。
- 51单片机流水灯画图打板焊元件历程
- 【论文阅读】A statistical significance of differences in classification accuracy of crop types using 。。。
- 动力节点『lol版』Java学习路线图(四)Javaweb阶段
- Google Chrome自定义新标签页
- 产品经理是做什么的?
- 半路接手项目,做好“沟通”很重要
热门文章
- Python入门学习指南--内附学习框架
- 2019年总结人工智能未来发展趋势
- 写完程序 看 蜡笔小新 的有木有
- 这6大核心技能,程序员升职加薪的利器
- 那些你不知道的程序员的多重身份
- 大一计算机在线考试,大一计算机考试题(含答案).pdf
- Hemberg-lab单细胞转录组数据分析(二)
- python购物车典例_Python实现的购物车功能示例
- python的魅力在哪_python的优势在哪
- python excel取列_python取excel表格第一列数据-python操作excel,使用xlrd模块,获取某一列数据的......