2013-09-25 10 views
5

मेरे पास एक ऐसा एप्लिकेशन है जो Google स्प्रेडशीट की पंक्तियों में हेरफेर करता है।com.google.gdata.util.PreconditionFeleException ListEntry.update() पर Google डॉक्स जावा एपीआई

Exception in thread "main" java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
Caused by: com.google.gdata.util.PreconditionFailedException: Precondition Failed 
Mismatch: etags = ["E10QemAgYit7ImA-CEFaShYM"], version = [2ag9hk74om621l] 
at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:614) 
at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:564) 
at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:560) 
at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:538) 
at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:536) 
at com.google.gdata.client.Service.update(Service.java:1563) 
at com.google.gdata.client.Service.update(Service.java:1530) 
at com.google.gdata.client.GoogleService.update(GoogleService.java:597) 
at com.google.gdata.data.BaseEntry.update(BaseEntry.java:639) 
at feedProcessor.ProcessClientFeed.UpdateRow(ProcessClientFeed.java:466) 
at feedProcessor.ProcessClientFeed.updateGoogleSpreadsheet(ProcessClientFeed.java:404) 
at feedProcessor.ProcessClientFeed.processFeed(ProcessClientFeed.java:318) 
at feedProcessor.ProcessClientFeed.main(ProcessClientFeed.java:61) 
... 5 more 

उत्तर

4

यहाँ प्रासंगिक दस्तावेज है: कभी कभी, जब मैं ListEntry.update() कहते हैं, मैं निम्नलिखित स्टैक ट्रेस प्राप्त

https://developers.google.com/gdata/javadoc/com/google/gdata/data/spreadsheet/ListEntry

https://developers.google.com/gdata/javadoc/com/google/gdata/data/BaseEntry#update()

इन डॉक्स के अनुसार

, अद्यतन() फ़ंक्शन एक पूर्व शर्त FailedException फेंकने में भी सक्षम नहीं है, इसलिए दस्तावेज़ यहां अनिवार्य रूप से बेकार हैं। इस मुद्दे का परीक्षण करने से पता चला है कि जब आप सत्र में एक से अधिक पंक्तियों में एक ही पंक्ति पर अद्यतन() फ़ंक्शन को कॉल करने का प्रयास करते हैं तो यह अपवाद फेंक दिया जाता है। वास्तव में 'सत्र' को परिभाषित करने वाला अभी भी अस्पष्ट नहीं है, लेकिन यदि आप अपनी सभी पंक्तियों को एक से अधिक बार लूप करते हैं, और प्रत्येक पुनरावृत्ति में प्रत्येक पंक्ति पर अद्यतन() को कॉल करते हैं, तो आपको यह त्रुटि मिल जाएगी। एकमात्र संकल्प जिसे मैं जानता हूं, अपने सॉफ़्टवेयर को लिखना है कि प्रत्येक पंक्ति (ListEntry) ने अपडेट() को केवल एक बार बुलाया है।

3

समस्या Google स्प्रेडशीट एपीआई Resource Versioning mecanism के कारण होती है।

कोई बात नहीं क्या प्रविष्टि को संपादित करने के लिए सक्षम होने के लिए - बस का उपयोग करें:

entry.setEtag("*") 
अद्यतन से पहले

और हाँ, यह बहु-उपयोगकर्ता अनुकूल नहीं है। यदि आपको बहु-उपयोगकर्ता समर्थन की आवश्यकता है तो फ़ीड को रीफ्रैच करें।

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