- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试将 Sugar ORM (v 1.3) 集成到我的 Android 应用程序中,但在尝试保存新创建的实体时我总是遇到崩溃 (NullPointerException)。
这是我的崩溃...
01-21 06:02:36.012 2856-2856/com.spuddmobile.kel E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.spuddmobile.kel, PID: 2856
java.lang.NullPointerException
at com.orm.SugarRecord.save(SugarRecord.java:109)
at com.orm.SugarRecord.save(SugarRecord.java:45)
at com.spuddmobile.kel.Fragments.NewAppFragment._SaveForm(NewAppFragment.java:231)
at com.spuddmobile.kel.Fragments.NewAppFragment.onMenuItemSelection(NewAppFragment.java:175)
at com.spuddmobile.kel.Activities.MainActivity.onOptionsItemSelected(MainActivity.java:89)
at android.app.Activity.onMenuItemSelected(Activity.java:2600)
at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1012)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:546)
at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:115)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
这是我的 AppManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.spuddmobile.kel" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:name="com.orm.SugarApp"
android:theme="@style/AppTheme" >
<meta-data android:name="DATABASE" android:value="kel.db" />
<meta-data android:name="VERSION" android:value="1" />
<meta-data android:name="QUERY_LOG" android:value="true" />
<meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.spuddmobile.kel.Model" />
<activity
android:name=".Activities.MainActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateHidden|adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.support.UI_OPTIONS" android:value="splitActionBarWhenNarrow" />
</activity>
</application>
</manifest>
如您所见,我确实根据文档将 android:name
设置为 com.orm.SugarApp
。
这是我的实体/域类...
public class Appraisal extends SugarRecord<Appraisal>
{
Double rent;
Integer area;
Integer currentPeriod;
Integer reviewFrequency;
Integer rentFreePeriod;
Integer interimRentPeriod;
Double interimRentPrice;
Integer secondInterimRentPeriod;
Double secondInterimRentPrice;
Double incentives;
Integer breakPeriod;
Double breakPenalty;
Double breakIncentiveRent;
Integer breakIncentiveRentPeriod;
Double breakRisk;
String name;
Date createdDate;
Date updatedDate;
public Appraisal ()
{
}
public Appraisal (Double rent,
Integer area,
Integer currentPeriod,
Integer reviewFrequency,
Integer rentFreePeriod,
Integer interimRentPeriod,
Double interimRentPrice,
Integer secondInterimRentPeriod,
Double secondInterimRentPrice,
Double incentives,
Integer breakPeriod,
Double breakPenalty,
Double breakIncentiveRent,
Integer breakIncentiveRentPeriod,
Double breakRisk,
String name,
Date createdDate,
Date updatedDate)
{
this.rent = rent;
this.area = area;
this.currentPeriod = currentPeriod;
this.reviewFrequency = reviewFrequency;
this.rentFreePeriod = rentFreePeriod;
this.interimRentPeriod = interimRentPeriod;
this.interimRentPrice = interimRentPrice;
this.secondInterimRentPeriod = secondInterimRentPeriod;
this.secondInterimRentPrice = secondInterimRentPrice;
this.incentives = incentives;
this.breakPeriod = breakPeriod;
this.breakPenalty = breakPenalty;
this.breakIncentiveRent = breakIncentiveRent;
this.breakIncentiveRentPeriod = breakIncentiveRentPeriod;
this.breakRisk = breakRisk;
this.name = name;
this.createdDate = createdDate;
this.updatedDate = updatedDate;
}
}
请注意,我的实体实际上确实扩展了 SugarRecord,并且我确实提供了所需的空构造函数以及参数化构造函数。我没有用上下文覆盖 super init 方法,因为根据 Sugar ORM v1.3 中不再需要的文档。
最后,崩溃的代码......
// create new app
Appraisal nApp = new Appraisal();
nApp.save();
保存是它崩溃的地方。现在,我已经通过 Android 设备监视器检查以确保正确创建了数据库,并且它确实存在于 APPRAISAL 表中。但是,当我查询该表时,它是空的,这是有道理的,因为 Sugar 从未完成 save()
函数。
有人知道我在这里做错了吗?为了确保我提供了所有相关信息,我的 Gradle 构建脚本如下。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
}
}
apply plugin: 'android'
android {
compileSdkVersion 13
buildToolsVersion '19.1.0'
defaultConfig {
applicationId 'com.spuddmobile.kel'
minSdkVersion 13
targetSdkVersion 17
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
productFlavors {}
}
repositories {
mavenCentral()
}
dependencies {
compile 'com.noveogroup.android:android-logger:1.3.4'
compile 'com.github.satyan:sugar:1.3'
}
最佳答案
你的实体有一个默认的无参数构造函数,你不初始化任何字段...所以你的字段的每个值都是 null
。
由于您有一个 NullPointerException
,如果我是您,我将尝试使用默认值初始化每个字段。例如:
public Appraisal ()
{
this.rent = 0.0;
this.area = 0;
...
}
关于Android - Sugar ORM 保存崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28065898/
我想在我的表 AnotherTable 中添加一个新列 anotherValue。 我已阅读 this related question和 SugarORM 文档,但是当我保存新数据并想稍后获取 an
我是一名 iOS 游戏开发者,最近看到一款有趣的物理和绘画游戏“Sugar, Sugar”。在游戏中,有许多像素粒子(数千个)从屏幕上生成并自由落到地上。玩家可以绘制任何形状的线条,这些线条可以将这些
private class HSV extends HorizontalScrollView { public LinearLayout L; public AbsoluteLayou
我将 Sugar ORM 用于数据库,将 Robolectric 用于单元测试。要将 Sugar ORM 与 Robolectric 结合使用,我遵循了 this问题。 我将下面的代码放入 start
当任何用户删除记录时,还需要将电子邮件发送给特定用户和管理员用户。我正在使用 Sugar CRM Pro,我也尝试过工作流程,但没有删除模块的操作。 最佳答案 您可以使用after_delete逻辑钩
我有这个lngArr: [ { "data": { "18746": 20.75, "id": "18746",
为了说明我的观点,以下代码包含一个名为ColorValueChanger的方法,该方法使用this.passedIn作为可选参数。我以为这是为构造函数保留的? class Foo extends St
我使用 sugar orm 库添加数据和检索数据但是数据没有正确检索下面是我的代码主.xml 书.java public class Book exten
我在我的 Android 应用程序中使用 Sugar ORM。我的数据来自服务器,但某些模型具有在设备端填充的额外字段。当我刷新我的数据时,我的设备填充字段被空值覆盖。 目前,我正在执行数据库查询以查
我的 Android 项目中有很多关于 Sugar ORM 的问题。 那是错误: 05-07 18:50:42.173 7252-7252/net.elinformaticoenganchad
大家好,我正在使用 android studio,此时我对如何使用 Sugar ORM 有了相当好的想法,但有一件事我无法找到或弄清楚。 所以我有一个名为 UserProfiles.java 的 Ac
我正在使用 Sugar Professional 6,并且还在社区版本中检查了相同的情况。在项目模块中,我有项目名称,它应该从另一个名为 MSO 的字段自动生成,并带有前缀和自动递增编号。 例如。 M
我使用 Module Loader 在 Sugar CRM 中上传了模块,它显示在列表中,但是当我尝试安装它时显示以下错误。 显示日志 Failed to copy cache/upgrades/te
Select PRODUCT from PRODUCT_TAGS where TAGS = 1 intersect Select PRODUCT from PRODUCT_TAGS where TAG
是否可以创建 Sugar ORM 独有的列?或者是否可以插入或替换指定的行,比方说通过用户名,但是这个用户名可能不在数据库中,因为他可能还没有被创建。 最佳答案 1.3 正式版暂不支持。但是你可以使用
Sugar ORM 在 Android 上完美运行,但在 Android 5> 上它会崩溃。我使用的是 1.4 版本 请帮帮我。 错误:android.database.sqlite.SQLiteE
我正在尝试将 Sugar ORM (v 1.3) 集成到我的 Android 应用程序中,但在尝试保存新创建的实体时我总是遇到崩溃 (NullPointerException)。 这是我的崩溃...
我目前正在使用 Sugar ORM和 Android Async Http Client对于我的 Android 应用程序。 我通读了 Sugar ORM 的文档,并完全按照那里写的去做。我的 Htt
我完全能够通过提供的示例使用 Sugar ORM。 在我的用例中,我从服务器下载了一个 SQLite 数据库(它的 ETL 负载以数百万条记录为单位,因此必须在服务器端完成)。下载保存到内部存储的自定
我是 SugarORM 的新手,我想在我的应用程序中使用这个库。设置此库元标记后,我必须为所有类扩展 SugarRecord,为此我将创建新类作为此示例中的产品 @Table public class
我是一名优秀的程序员,十分优秀!