2015-01-21 11 views
5

मैं (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:namecom.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' 
} 

उत्तर

4

आपका इकाई एक डिफ़ॉल्ट कोई पैरामीटर निर्माता जहां किसी भी क्षेत्र intialize नहीं है ... तो अपने क्षेत्रों में से प्रत्येक मान null है।

आप एक NullPointerException है के रूप में, अगर मैं तुम्हें थे, मैं एक डिफ़ॉल्ट मान के साथ हर क्षेत्र init की कोशिश करेंगे। उदाहरण के लिए:

public Appraisal() 
{ 
    this.rent = 0.0; 
    this.area = 0; 
    ... 
} 
+0

मुझे लगता है कि एक कोशिश है, लेकिन चीनी के स्वयं के प्रलेखन कि आवश्यक नहीं है प्रति दे देंगे। http://satyan.github.io/sugar/getting-started.html। यदि यह मेरी समस्या हल करता है तो दोबारा पोस्ट किया जाएगा। –

+2

ठीक है, तो पहले ब्रेवो से !! यह पता चला है कि चीनी को कुल तिथि वस्तुओं को पसंद नहीं है। मेरे दिनांक गुणों को डिफ़ॉल्ट मान दोनों देने के बाद, यह काम करना शुरू कर दिया। –

+0

इसके अलावा, मुझे नहीं पता कि किसी ने आपको वोट क्यों दिया है। आपका उत्तर मुझे सही समाधानों तक ले जाता है, इसलिए मैं आपको वोट देने और उत्तर स्वीकार करने जा रहा हूं। –

2

चीनी ओआरएम प्रकार java.sql.Timestamp प्रकार की शून्य वस्तुओं को स्वीकार करेगा।

यह आपके कोड के अन्य भागों तोड़ सकता है (जैसे के बराबर होती है java.sql.Timestamp और java.util.Date तुलना करने के लिए काम नहीं करता है)।

संबंधित मुद्दे