我将使用sqlite编写示例代码,该代码必须同时适用于ANdroid和IOS(和桌面)
这是我的 build.gradle
buildscript {
repositories {
jcenter()
mavenCentral()
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
}
dependencies { classpath 'org.javafxports:jfxmobile-plugin:1.0.6' }
}
apply plugin: 'org.javafxports.jfxmobile'
repositories {
jcenter()
mavenCentral()
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
maven { url 'https://oss.sonatype.org/content/repositories/releases' }
}
ext.CHARM_DOWN_VERSION = "1.0.0"
dependencies {
compile 'mysql:mysql-connector-java:3.1.12'
//compile 'org.xerial:sqlite-jdbc:3.9.0-SNAPSHOT'
compile 'org.sqldroid:sqldroid:1.0.3'
compile "com.gluonhq:charm-down-common:$CHARM_DOWN_VERSION"
desktopRuntime "com.gluonhq:charm-down-desktop:$CHARM_DOWN_VERSION"
//desktopRuntime 'org.xerial:sqlite-jdbc:3.9.0-SNAPSHOT'
androidRuntime "com.gluonhq:charm-down-android:$CHARM_DOWN_VERSION"
androidRuntime 'org.sqldroid:sqldroid:1.0.3'
iosRuntime "com.gluonhq:charm-down-ios:$CHARM_DOWN_VERSION"
}
mainClassName = 'com.version17.Version17'
jfxmobile {
android {
manifest = 'src/android/AndroidManifest.xml'
packagingOptions {
exclude 'META-INF/INDEX.LIST'
}
}
ios {
infoPList = file('src/ios/Default-Info.plist')
forceLinkClasses = ['com.version17.**.*', 'com.mysql.**.*', 'SQLite.**.*', 'com.gluonhq.**.*']
}
}
sqliteHelper.java
public static void testSqli() throws SQLException, ClassNotFoundException{
Class.forName("SQLite.JDBCDriver");
String dbName = "mtt8.db";
File dir = null;
try {
dir = PlatformFactory.getPlatform().getPrivateStorage();
} catch (IOException e) {
e.printStackTrace();
}
File db = new File (dir, dbName);
String dbUrl = "jdbc:sqlite:" + db.getAbsolutePath();
Connection conn = DriverManager.getConnection(dbUrl);
//create table
Statement st=null;
st = conn.createStatement();
st.executeUpdate("DROP TABLE IF EXISTS village;");
st.executeUpdate("CREATE table village (id int, name varchar(20))");
//insert row
for (int i=0; i<50; i++){
st.executeUpdate("INSERT INTO village VALUES (" +i+ ", 'Erkan Kaplan')");
}
//select
String query = "SELECT id, name from village";
ResultSet rs = null;
rs = st.executeQuery(query);
while(rs.next()) {
int id = 0;
id = rs.getInt(1);
String name = null;
name = rs.getString(2);
System.out.println("id:"+ id+ ", name: "+ name);
st.executeUpdate("DELETE from village");
rs.close();
}
}
该功能适用于Ipad设备和台式机,但不适用于Android设备(如Samsung Tablet)。
谁能告诉我为什么上面的代码在三星平板电脑上不起作用?还是取决于我必须在我的代码中添加?
感谢Erkan Kaplan
您可以加载每个平台所需的驱动程序,并使用Gluon Charm-Down查找并加载该平台。
在IDE上使用Gluon
插件,可以在build.gradle
文件中轻松添加不同的依赖项,具体取决于平台。
编辑
还添加了桌面。
对于桌面,我们可以使用org.sqlite.JDBC
;对于Android,我们可以使用org.sqldroid.SQLDroidDriver
。对于iOS,不需要依赖,因为SQLite.JDBCDriver
Robovm已经包含了它。
repositories {
jcenter()
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
}
ext.CHARM_DOWN_VERSION = "1.0.0"
dependencies{
compile "com.gluonhq:charm-down-common:$CHARM_DOWN_VERSION"
desktopRuntime "com.gluonhq:charm-down-desktop:$CHARM_DOWN_VERSION"
desktopRuntime 'org.xerial:sqlite-jdbc:3.9.0-SNAPSHOT'
androidRuntime "com.gluonhq:charm-down-android:$CHARM_DOWN_VERSION"
androidRuntime 'org.sqldroid:sqldroid:1.0.3'
iosRuntime "com.gluonhq:charm-down-ios:$CHARM_DOWN_VERSION"
}
但是我们需要将其添加到forceLinkClasses
选项中:
jfxmobile {
android {
manifest = 'src/android/AndroidManifest.xml'
}
ios {
forceLinkClasses = [ 'your.package.**.*', 'SQLite.**.*']
infoPList = file('src/ios/Default-Info.plist')
}
}
现在,在你的代码,你可以根据应用程序所运行的平台上加载一个驱动程序或其他,并创建一个连接,提供像讨论的本地路径在这里:
private void testSqli() throws SQLException, ClassNotFoundException {
if (JavaFXPlatform.isAndroid()) {
Class.forName("org.sqldroid.SQLDroidDriver");
} else if (JavaFXPlatform.isIOS()) {
Class.forName("SQLite.JDBCDriver");
} else if (JavaFXPlatform.isDesktop()) {
Class.forName("org.sqlite.JDBC");
}
File dir;
String dbUrl = "jdbc:sqlite:";
try {
dir = PlatformFactory.getPlatform().getPrivateStorage();
String dbName = "yourDatabase.db";
File db = new File (dir, dbName);
dbUrl = dbUrl + db.getAbsolutePath();
Connection conn = DriverManager.getConnection(dbUrl);
...
} catch (IOException ex) { }
}
现在,您应该可以在台式机,Android和iOS上运行它了。我已经使用NetBeans和IntelliJ对它们中的三个进行了测试,但是前者比后者更好地管理平台依赖性。
问题内容: 我一直在研究可能会遇到一些虫子的地方。 我没有到达代码的确切位置,因为在Logcat中编译了每一行代码,但最后却得到了非常奇怪的错误,在下面描述日志: 当我检查代码时,没有发现stackoverflow的痕迹。当我在android 3.0或更高版本上运行相同的代码时,它可以有效运行并正确运行,但在android 2.3.3或3.0以下版本上却无法运行。请让我知道是否有人知道这个问题吗?
最近,我们在Android应用程序中增加了对Chromecast的支持,但在对各种移动设备(手机和平板电脑)的扩展测试中,发现在许多移动设备上,Flipps应用程序都没有发现Chromecast。在相同的设备上,我们使用了最新版本的官方Chromecast SDK演示应用程序进行测试,该应用程序从https://github.com/googlecast/castvideo-Android下载(主
我正在rpi3上用Android开发东西。我在Android things platform 1.0版本的Raspi3中使用usb设备(pendrive)时遇到问题,我能够检测usb(pendrive)文件,并将文件从sd卡复制到它们。我使用“'库,我无法使用所有类型的usb设备。我有3个FAT32的Pendrive,我只能使用其中一个,其他人向我报告一条错误消息,一旦我将它们插入mi rpi3,
我刚从Eclipse切换到Android Studio。从现在起,我看到的新IDE比Eclipse有更多的特性,我喜欢在我的应用程序开发工作中使用新IDE。 我只是无法理解一件事:在Eclipse中,有一个非常有用的DDMS透视图,您可以从这里阅读Logcat并执行许多其他操作,例如使用非常有用的函数,它允许您转储UI并检查它,以了解在布局中显示的内容。 我在Android Studio中没有看到
问题内容: 我对Android和SCORM没什么疑问。在这两个领域中,我都还很新,我只花了一个晚上在网上挖了一些答案。 我发现的主题是关于将SCORM软件包与LMS同步,但是我不需要。我只是想知道如何在android设备(带Android 4+ OS的联想平板电脑)上播放(而且只需播放,无需任何同步或跟踪)SCORM程序包。如果我尝试制作自己的允许浏览本地SCORM软件包的应用程序,是否可以使用W
我正在一台新的Windows10笔记本电脑上设置一个Android开发环境。我在使用其他操作系统的其他机器上已经这样做过很多次了,但这是第一次使用Windows10。问题是,Android Studio无法检测我的设备(LG区域3)后,我通过USB连接它。请注意,我以前曾在Arch Linux桌面上使用此设备进行开发。 我已经下载了Android Studio并创建了几个AVD。我可以运行我的应用