我得到的错误是"java.lang.IllegalArgumentException:class com.activeandroid.DatabaseHelper声明了多个名为mContext的JSON字段"
我正在使用AndroidAnnotations RestClient从我的Web服务中提取数据并序列化为POJO.使用ORMLite时序列化工作正常,但我最近决定试用Active Android,现在我的类扩展了Model.Gson正在序列化我无法控制的父类.无论如何,我只能包含某些字段,或者只是从RestClient返回普通的JSON,并以不同的方式进行序列化
@Rest(rootUrl = "http://stuff...com", converters = { GsonHttpMessageConverter.class })
public interface RestClient {
@Get("/AndroidController/createFacebookUser?facebookToken={facebookToken}&catIds= {catIds}")
User createFacebookUser(String facebookToken,String catIds);
}
Run Code Online (Sandbox Code Playgroud)
用户模型是
@Data
@Table(name = "Users")
public class User extends Model {
@Column(name = "SystemID")
private String systemID;
@Column(name = "Name")
private String name;
public List<GameEntry> items() {
return getMany(GameEntry.class, "Category");
}
public User(){}
Run Code Online (Sandbox Code Playgroud)
}
我在我的Android应用程序中使用activeandroid.
在开发过程中运行调试版本时,一切正常.在创建项目的发布版本后,应用程序现在崩溃了.这种情况发生在带有Android 5.0的Nexus5以及带有Android 4.4.2的Nexus 7上.
如果你需要看一下,这是源代码!
https://github.com/MetalMatze/Krautreporter
谢谢!
java.lang.RuntimeException: Unable to create application com.activeandroid.app.Application: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.reflect.Field.getType()' on a null object reference
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4521)
at android.app.ActivityThread.access$1500(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1339)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.reflect.Field.getType()' on a null object reference
at com.activeandroid.e.f.c(Unknown Source)
at com.activeandroid.e.f.c(Unknown Source)
at com.activeandroid.f.c(Unknown Source)
at com.activeandroid.f.onCreate(Unknown Source)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at …Run Code Online (Sandbox Code Playgroud) 我有一个库项目,包括使用Gradle的活动android.为了让它工作,我必须添加
compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'
Run Code Online (Sandbox Code Playgroud)
并为它添加存储库,如下所示:
repositories {
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我在库项目中执行此操作,则会收到错误:
Error:A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration ':app:_debugCompile'.
> Could not find com.michaelpardo:activeandroid:3.1.0-SNAPSHOT.
Searched in the following locations:
https://jcenter.bintray.com/com/michaelpardo/activeandroid/3.1.0-SNAPSHOT/maven-metadata.xml
https://jcenter.bintray.com/com/michaelpardo/activeandroid/3.1.0-SNAPSHOT/activeandroid-3.1.0-SNAPSHOT.pom
https://jcenter.bintray.com/com/michaelpardo/activeandroid/3.1.0-SNAPSHOT/activeandroid-3.1.0-SNAPSHOT.jar
file:/Users/user/AndroidSDK/extras/android/m2repository/com/michaelpardo/activeandroid/3.1.0-SNAPSHOT/maven-metadata.xml
file:/Users/user/AndroidSDK/extras/android/m2repository/com/michaelpardo/activeandroid/3.1.0-SNAPSHOT/activeandroid-3.1.0-SNAPSHOT.pom
file:/Users/user/AndroidSDK/extras/android/m2repository/com/michaelpardo/activeandroid/3.1.0-SNAPSHOT/activeandroid-3.1.0-SNAPSHOT.jar
file:/Users/user/AndroidSDK/extras/google/m2repository/com/michaelpardo/activeandroid/3.1.0-SNAPSHOT/maven-metadata.xml
file:/Users/user/AndroidSDK/extras/google/m2repository/com/michaelpardo/activeandroid/3.1.0-SNAPSHOT/activeandroid-3.1.0-SNAPSHOT.pom
file:/Users/user/AndroidSDK/extras/google/m2repository/com/michaelpardo/activeandroid/3.1.0-SNAPSHOT/activeandroid-3.1.0-SNAPSHOT.jar
Required by:
Condeco:app:unspecified > Condeco:common:unspecified
Run Code Online (Sandbox Code Playgroud)
我正在添加我的库模块,如下所示:
dependencies {
compile project(':common')
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
}
Run Code Online (Sandbox Code Playgroud)
要删除此错误,我必须以相同的方式将存储库添加到主应用程序模块:
repositories {
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,项目编译得很好.
我是否可以使用仅在库项目中定义的存储库来编译我的项目,而无需将存储库添加到主应用程序模块?我只想让库模块照顾好自己.
它开始于一个Android手机,简单的创建语句在assets/migrations文件夹中的文件中(我使用名为ActiveAndroid的第三方库,并且2年它工作正常 - 我没有改变任何事情):
CREATE TABLE IF NOT EXISTS Car (Brand TEXT);
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
04-07 15:31:36.683 15738-15738/? E/SQLiteLog? (21) API called with NULL prepared statement
04-07 15:31:36.683 15738-15738/? E/SQLiteLog? (21) misuse at line 63243 of [00bb9c9ce4]
java.lang.RuntimeException: Unable to create application com.activeandroid.app.Application: android.database.sqlite.SQLiteException: not an error (code 0)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4394)
at android.app.ActivityThread.access$1300(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1294)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: not an error (code 0) …Run Code Online (Sandbox Code Playgroud) 我正在使用ActiveAndroid并使用外部联接运行查询:
List<NavigationState> models = new Select()
.from(NavigationState.class)
.leftJoin(BundleItem.class)
.on("aColumnName = anotherColumnName")
.execute();
Run Code Online (Sandbox Code Playgroud)
显然我想要的是NavigationStates,以及任何相关的BundleItems.我实际得到的是NavigationStates.以下是运行查询后填充游标数据的ActiveAndroid代码的一部分:
List<String> columnsOrdered = new ArrayList<String>(Arrays.asList(cursor.getColumnNames()));
do {
Model entity = Cache.getEntity(type, cursor.getLong(columnsOrdered.indexOf(idName)));
if (entity == null) {
entity = (T) entityConstructor.newInstance();
}
entity.loadFromCursor(cursor);
entities.add((T) entity);
}
while (cursor.moveToNext());
}
}
Run Code Online (Sandbox Code Playgroud)
你可以看到整个事情,这是processCursor方法,这里:https://github.com/pardom/ActiveAndroid/blob/df29214c9584d7b626f361e95b95daccb0c0114c/src/com/activeandroid/util/SQLiteUtils.java
所以你可以看到,除了填写传入的类型(loadFromCursor不填写其他表中的任何内容)之外,它不会尝试做任何事情.我甚至把它改成要求列表,BundleItem但它显然仍然返回了同样的东西.
AA文档关于从一对多关系的许多方面获取"许多"记录的唯一内容是调用Model.getMany,但是它运行自己的查询(结果集中的每个记录一个!),所以如果我这样做在第一个查询中进行连接没有意义.
我错过了什么,因为看起来似乎连接是ActiveAndroid允许的,但没有用,因为你只能从连接中的一个表中获得结果?在这种情况下,我可以解决它,但我想知道我是否选择了错误的ORM,因为这看起来像是一个非常基本的功能.
我试图Person用ActiveAndroid 存储一个对象.我这样设定了生日:person.setBirthdate(new java.sql.Date((new Date()).getTime()));.在分配我正在呼叫的所有数据之后person.save();.
我使用以下命令从数据库中获取所有人员的列表: new Select().from(Person.class).execute();
如果我不关闭应用程序一切正常(生日总是从数据库中正确返回).但是,当我完全关闭应用程序然后重新启动它时,生日值始终为空.所有其他字段(名字,姓氏等)都是正确的.
我真的不知道为什么会这样,希望得到一些帮助!
编辑:仔细看看我的数据库后,我发现没有创建birthdate-column.我仍然不确定为什么数据在不关闭应用程序时可用.
第二次编辑:我添加了一个新列(一个字符串),保存到数据库并且运行正常.所以问题不是过时的数据库.除了日期列之外的所有列都已创建.
我还将date数据类型更改为字符串.然后保存了生日.将其更改回Date数据类型会再次导致原始问题.真的很奇怪......有谁知道最近发生了什么?
所以,我有一个 Android 库,应该由多个应用程序使用。问题是该库使用 Active android 来存储数据,并且清单中已经定义了 AA_DB_NAME、AA_DB_VERSION、AA_MODELS 等。
<meta-data
android:name="AA_DB_NAME"
android:value="lib.db" />
<meta-data
android:name="AA_DB_VERSION"
android:value="20"/>
<meta-data
android:name="AA_SQL_PARSER"
android:value="delimited" />
<meta-data
android:name="AA_MODELS"
android:value="com.mylib.models.UserModel,com.mylib.models.HomeModel"
Run Code Online (Sandbox Code Playgroud)
当应该使用该库的应用程序也使用 ActiveAndroid 来存储数据并定义了类似的元数据标记时,就会出现问题,因为这会导致明显的合并问题。有出路吗?在这种情况下,合并策略应该是什么?问题是我现阶段无法对库进行太多更改,因为已经有 4-5 个应用程序在使用它,但我可以建议这些应用程序使用合并策略。
我正在构建一个Android应用程序,我想在其中使用ActiveAndroid ORM.在自述文件中,我阅读了有关如何将其包含在Maven或ADT中的说明,但我正在使用/尝试使用Gradle学习Android Studio.所以我想我需要插入ActiveAndroid作为依赖.在这些行上的build.gradle文件中:
dependencies {
compile 'com.android.support:appcompat-v7:+'
}
Run Code Online (Sandbox Code Playgroud)
我真的不知道我应该使用什么样的字符串/ url,以便Gradle可以自动找到ActiveAndroid并将其编译到我的项目中.
Sicne我有点失落; 任何人都可以在这里给我一个关于如何解决这个问题的建议吗?
[编辑]我现在构建jar并使用建议编译它compile files('libs/ActiveAndroid.jar')(我的jar文件中没有版本名称).它现在成功构建,但我仍然无法从中导入类.见下图:

如何才能获得仅包含Category模型"Name"列的数组?
我可以使用我的所有类别
List<Category> categoryList = new Select()
.from(Category.class)
.execute();
Run Code Online (Sandbox Code Playgroud)
然后创建另一个名为的数组Category,但我想有一种方法直接得到它,我找不到如何.
我收到此错误
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.activeandroid.TableInfo.getIdName()' on a null object reference
Run Code Online (Sandbox Code Playgroud)
当我禁用即时运行我没有得到任何错误我的项目工作正常.
但我想保持即时运行 启用.我找到一些地方如果我想启用Instant Run我必须取消检查
重新启动代码更改的活动
但这对我不起作用.
任何解决方案都非常感谢.
activeandroid ×10
android ×10
sqlite ×4
gradle ×2
date ×1
gson ×1
java ×1
orm ×1
resttemplate ×1