哪个是适用于Android的最佳ORM工具?
我看到ORMlite和ActiveAndroid是最受讨论的,我的一个朋友建议我使用GreenDAO.那么寻找一些可以帮助我做决策的知识资源?
我希望判断的功能是免费提供(开源),良好的文档,活动论坛,稳定版本等,这是开发人员所需要的.
我有一个使用ActiveAndroid的应用程序,它一直工作正常.然而; 现在当我尝试将模型保存到数据库时,我得到了一个SecurityException.
堆栈是:
Error saving model java.lang.SecurityException: Failed to find provider null for user 0; expected to find a valid ContentProvider for this authority
at android.os.Parcel.readException(Parcel.java:1942)
at android.os.Parcel.readException(Parcel.java:1888)
at android.content.IContentService$Stub$Proxy.notifyChange(IContentService.java:801)
at android.content.ContentResolver.notifyChange(ContentResolver.java:2046)
at android.content.ContentResolver.notifyChange(ContentResolver.java:1997)
at android.content.ContentResolver.notifyChange(ContentResolver.java:1967)
at com.activeandroid.Model.save(Model.java:162)
[.... local stack removed]
Run Code Online (Sandbox Code Playgroud)
还有其他人经历过这个吗?我们是否需要在AndroidManifest.xml中指定Content Provider?
对不起,但我还没有一个孤立的例子.我会努力把东西放在一起.
提前致谢
我已经使用ActiveAndroid一段时间了,我最近听说Realm是另一个不错的选择.我正在考虑更改我的应用程序以使用Realm,但在此之前,我在寻找是否有人已经完成了这两者之间的性能比较.我在realm的网站上找到了一些比较,但那些是在ORMLite和SQLite上.
任何建议表示赞赏.
有谁知道是否可以在ActiveAndroid中为抽象类创建表.例如,我可以有一个抽象类Animal,它有两个具体的类Dog和Cat.我希望能够做到这样的事情:
List<Animal> animals = new Select().from(Animals.class).execute();
Run Code Online (Sandbox Code Playgroud)
这会导致'动物'包含所有已保存的猫和狗.要么:
Animal animal = new Select().from(Animals.class).where("name = ?", name).executeSingle();
Run Code Online (Sandbox Code Playgroud)
"动物"可以是猫还是狗.不幸的是,当我这样做时,我得到一个异常,因为没有为抽象类Animal创建表.有谁知道如何使用ActiveAndroid进行此操作?
在Android SQLite的两个ORM解决方案 - ORMlite与ActiveAndroid之间,在速度,可扩展性等方面是否有任何显着差异?第一个是免费的,第二个是商业的,因此付费.什么是更好的使用,为什么?
谢谢
Hmyzak
我正在使用Gson序列化Active Android模型.模型类只包含基元,Gson应该没有问题使用默认设置序列化它.但是,当我尝试时,我收到错误:
java.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: <MyClass>. Forgot to register a type adapter?
我真的不想为我的每个模型类编写一个类型适配器,我该如何解决这个问题呢?
我在我的应用中使用Active Android.它工作正常,直到我将Android Studio从1.3升级到2.0.通过此升级,我的gradle也升级到2.0,这导致Active Android出现问题.
使用gradle 2.0构建时出现此错误.
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.activeandroid.TableInfo.getTableName()' on a null object reference
at com.activeandroid.Cache.getTableName(Cache.java:156)
at com.activeandroid.query.From.addFrom(From.java:169)
at com.activeandroid.query.From.toSql(From.java:250)
at com.activeandroid.query.From.execute(From.java:298)
Run Code Online (Sandbox Code Playgroud)
我尝试使用gradle 1.3构建我的旧工作室它仍然正常工作.有什么帮助吗?
当app发出上述错误时,build.gradle文件
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0'
classpath 'com.google.gms:google-services:2.0.0-beta2'
}
}
allprojects {
repositories {
jcenter()
}
}
Run Code Online (Sandbox Code Playgroud)
当app正常工作时build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
classpath 'com.google.gms:google-services:2.0.0-beta2'
}
}
allprojects {
repositories {
jcenter()
}
}
Run Code Online (Sandbox Code Playgroud)
gradle包装器属性
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists …Run Code Online (Sandbox Code Playgroud) 我开发了一个Android-App,我使用SQLiteOpenHelper将数据保存在SQLite数据库中.
我想知道我是否可以使用ActiveAndroid更新我的应用程序,但是以某种方式保存以前存储在数据库中的用户数据.
那可能吗?
我正在尝试使用ActiveAndroid对列进行批量更新.这是我的代码:
new Update(SomeModel.class).set("Enabled = 0").execute();
Run Code Online (Sandbox Code Playgroud)
但是我得到了一个(编辑:我的不好,错误是在其他地方).有谁知道如何执行StackOverflowError.Update()查询?它在ActiveAndroid的wiki中没有说什么.
编辑:
这个语法是正确的:
new Update(SomeModel.class)
.set("Enabled = 0")
.where("Account = ?", account.getId())
.execute();
Run Code Online (Sandbox Code Playgroud)
where如果不需要,您可以跳过.
我遇到了active-android的问题.我试图获取用户位置,乘客数量和总体方向.我想使用activeAndroid将这些保存到名为"Splits"的表中的手机存储中.但每当我调用该save()方法时,我都会得到一长串错误.我试图重新安装应用程序,并在清单中更改我的数据库名称,但这些解决方案都不起作用.请记住我对编程很新,所以如果可能的话,就像我是5.谢谢你:)
这是LogCat输出
11-03 23:27:51.094 2905-2905/dk.specialisering.splitcab E/SQLiteLog? (1) no such table: Splits
11-03 23:27:51.115 2905-2905/dk.specialisering.splitcab E/SQLiteDatabase? Error inserting passengers=1 Id=null startLong=9.92773733 direction=North startLat=57.0487396
android.database.sqlite.SQLiteException: no such table: Splits (code 1): , while compiling: INSERT INTO Splits(passengers,Id,startLong,direction,startLat) VALUES (?,?,?,?,?)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1118)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:691)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1589)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1461)
at com.activeandroid.Model.save(Model.java:153)
at dk.specialisering.splitcab.MainActivity.save(MainActivity.java:127)
at dk.specialisering.splitcab.MainActivity$1.onClick(MainActivity.java:37)
at android.view.View.performClick(View.java:4475)
at android.view.View$PerformClick.run(View.java:18786)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at …Run Code Online (Sandbox Code Playgroud)