标签: activeandroid

Gson序列化错误类com.activeandroid.DatabaseHelper声明了多个名为mContext的JSON字段

我得到的错误是"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 gson resttemplate activeandroid android-annotations

5
推荐指数
1
解决办法
4530
查看次数

尝试在空对象引用上调用虚方法'java.lang.Class java.lang.reflect.Field.getType()'

我在我的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)

java sqlite orm android activeandroid

5
推荐指数
1
解决办法
3165
查看次数

当Active Android包含在库中时,无法解决Gradle中的活动Android依赖关系

我有一个库项目,包括使用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 gradle activeandroid

5
推荐指数
1
解决办法
1321
查看次数

SQLite突然认为一切都不是错误

它开始于一个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)

sqlite android activeandroid

5
推荐指数
1
解决办法
1985
查看次数

加入ActiveAndroid - 如何获取第二个表的数据

我正在使用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,因为这看起来像是一个非常基本的功能.

sqlite android activeandroid

5
推荐指数
0
解决办法
1484
查看次数

ActiveAndroid:未创建日期列

我试图Person用ActiveAndroid 存储一个对象.我这样设定了生日:person.setBirthdate(new java.sql.Date((new Date()).getTime()));.在分配我正在呼叫的所有数据之后person.save();.

我使用以下命令从数据库中获取所有人员的列表: new Select().from(Person.class).execute();

如果我不关闭应用程序一切正常(生日总是从数据库中正确返回).但是,当我完全关闭应用程序然后重新启动它时,生日值始终为空.所有其他字段(名字,姓氏等)都是正确的.

我真的不知道为什么会这样,希望得到一些帮助!

编辑:仔细看看我的数据库后,我发现没有创建birthdate-column.我仍然不确定为什么数据在不关闭应用程序时可用.

第二次编辑:我添加了一个新列(一个字符串),保存到数据库并且运行正常.所以问题不是过时的数据库.除了日期列之外的所有列都已创建.

我还将date数据类型更改为字符串.然后保存了生日.将其更改回Date数据类型会再次导致原始问题.真的很奇怪......有谁知道最近发生了什么?

sqlite android date activeandroid

5
推荐指数
1
解决办法
567
查看次数

ActiveAndroid:如何在 android lib 以及 android 应用程序中拥有不同的 activeandroid 元数据

所以,我有一个 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 android-manifest activeandroid

5
推荐指数
0
解决办法
319
查看次数

如何将ActiveAndroid ORM添加到Gradle?

我正在构建一个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文件中没有版本名称).它现在成功构建,但我仍然无法从中导入类.见下图: 在此输入图像描述

android gradle activeandroid android-studio

4
推荐指数
1
解决办法
6746
查看次数

如何使用ActiveAndroid查询结果只能获得一列?

如何才能获得仅包含Category模型"Name"列的数组?

我可以使用我的所有类别

List<Category> categoryList = new Select()
    .from(Category.class)
    .execute();
Run Code Online (Sandbox Code Playgroud)

然后创建另一个名为的数组Category,但我想有一种方法直接得到它,我找不到如何.

android activeandroid

4
推荐指数
1
解决办法
2682
查看次数

尝试在空对象引用上调用虚方法'java.lang.String com.activeandroid.TableInfo.getIdName()'

我收到此错误

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我必须取消检查

重新启动代码更改的活动

但这对我不起作用.

任何解决方案都非常感谢.

android activeandroid

4
推荐指数
2
解决办法
3096
查看次数