मैं (v 1.3) अपने Android एप्लिकेशन में चीनी ORM एकीकृत करने के लिए जब एक नव निर्मित इकाई को बचाने की कोशिश की कोशिश कर रहा हूँ और मैं एक दुर्घटना (NullPointerException) जा रहे हैं।एंड्रॉयड - चीनी ORM सहेजें क्रैश
यहाँ मेरी दुर्घटना है ...
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 का विस्तार करता है और मैं आवश्यक खाली निर्माता के साथ-साथ एक पैरामिट्रीकृत निर्माता प्रदान करते हैं। मैं एक संदर्भ के साथ सुपर इनिट विधि को ओवरराइड नहीं कर रहा हूं क्योंकि प्रलेखन के अनुसार जो अब चीनी ओआरएम के v1.3 में आवश्यक नहीं है।
अंत में, कोड है कि दुर्घटनाओं ...
// create new app
Appraisal nApp = new Appraisal();
nApp.save();
बचाने जहां यह दुर्घटनाओं है। अब, मैंने यह सुनिश्चित करने के लिए जांच की है कि एंड्रॉइड डिवाइस मॉनिटर के माध्यम से डेटाबेस सही तरीके से बनाया जा रहा है, और यह वास्तव में एक अप्रासंगिक तालिका के साथ मौजूद है। हालांकि, जब मैं तालिका से पूछता हूं तो यह खाली होता है जो समझ में आता है क्योंकि चीनी कभी भी save()
फ़ंक्शन को पूरा नहीं करता है।
किसी को भी मैं गलत यहाँ कर रहा हूँ के साथ किसी भी विचार है? बस यह सुनिश्चित करने के लिए कि मैंने सभी प्रासंगिक जानकारी दी है, मेरी ग्रैडल बिल्ड स्क्रिप्ट नीचे है।
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'
}
मुझे लगता है कि एक कोशिश है, लेकिन चीनी के स्वयं के प्रलेखन कि आवश्यक नहीं है प्रति दे देंगे। http://satyan.github.io/sugar/getting-started.html। यदि यह मेरी समस्या हल करता है तो दोबारा पोस्ट किया जाएगा। –
ठीक है, तो पहले ब्रेवो से !! यह पता चला है कि चीनी को कुल तिथि वस्तुओं को पसंद नहीं है। मेरे दिनांक गुणों को डिफ़ॉल्ट मान दोनों देने के बाद, यह काम करना शुरू कर दिया। –
इसके अलावा, मुझे नहीं पता कि किसी ने आपको वोट क्यों दिया है। आपका उत्तर मुझे सही समाधानों तक ले जाता है, इसलिए मैं आपको वोट देने और उत्तर स्वीकार करने जा रहा हूं। –