2012-02-07 16 views
14

मैं अपने एंड्रॉइड प्रोजेक्ट में के साथ OrmLite का उपयोग करना चाहता हूं, लेकिन दोनों पुस्तकालयों के पास अपना स्वयं का सार SQLiteOpenHelper कक्षा लागू करने के लिए है। जावा कक्षा को दो वर्गों का विस्तार करने की अनुमति नहीं देता है और यदि मैं अलग से लागू करता हूं, तो वे एक दूसरे के साथ संवाद नहीं करेंगे।मैं Android में SQLCipher के साथ ORMLite का उपयोग कैसे कर सकता हूं?

मैं दोनों के साथ कैसे काम कर सकता हूं? मैं SQLiteOpenHelper कार्यान्वयन समस्या को कैसे हल करूं?

+0

SQLCiphers संस्करण SQLiteOpenHelper का एक पुन: अनुमानित संस्करण है - यानी यह एक ही कक्षा नहीं है - इन दोनों को अच्छी तरह से काम करने के लिए आपको SQLCipher-packages का उपयोग करने के लिए संपूर्ण ऑर्मेलाइट लाइब्रेरी को दोबारा काम करना होगा बजाय। – Jens

+1

यह सुनिश्चित होगा कि OrmLite ने यह ऑफ़-द-बॉक्स किया था। अगर स्क्लिफर एक मेवेन आर्टिफैक्ट में आया तो भी अच्छा होगा। वे दो पुस्तकालयों की तरह लगते हैं जिन्हें स्पष्ट रूप से एक दूसरे के साथ काम करने की आवश्यकता होती है (बेहतर)। –

उत्तर

3

यह संभव होना चाहिए @ ब्रूनो।

काम करने के लिए एक तरीका है कि आप अपनी परियोजना में ORMLite's OrmLiteSqliteOpenHelper class कॉपी करें, इसे LocalOrmLiteSqliteOpenHelper या किसी चीज़ का नाम दें, और बेस क्लास को SQLCipher सहायक वर्ग के रूप में बदलें। मुझे विश्वास नहीं है कि उन्होंने कक्षा का नाम बदलकर नहीं किया है। (भुनभुनाना)

public abstract class LocalOrmLiteSqliteOpenHelper 
    extends info.guardianproject.database.sqlcipher.SQLiteOpenHelper { 

एक और तरीका है अपने सहायक का विस्तार SQLCipher के SQLiteOpenHelper और फिर OrmLiteSqliteOpenHelper से विभिन्न चीजों को आप की जरूरत को लागू खुद के लिए किया जाएगा। हालांकि यह थोड़ा और काम करेगा। ORMLite डेटाबेस डेटाबेस के साथ थोड़ा नृत्य करना है जबकि डेटाबेस बनाया जा रहा है अन्यथा यह रिकर्सिव हो जाता है।

यदि इनमें से कोई भी काम है तो मुझे बताएं।

+3

मैंने कोशिश की लेकिन मुझे संकलन समय त्रुटियां मिल रही हैं EX: "नया एंड्रॉइड कनेक्शन कनेक्शन (यह);" –

+1

वही त्रुटि। कन्स्ट्रक्टर एंड्रॉइडकनेक्शनसोर्स (OrmLiteSqliteOpenHelper) अपरिभाषित है। यह जवाब क्यों स्वीकार किया जाता है? –

+2

उत्तर पुराना है। यह ORMLite के पुराने संस्करणों के लिए मान्य था। तो, दोस्तों, जो शिकायत कर रहे हैं, कृपया किसी को उत्तर दें –

3

बस जो लोग इस पर मदद की जरूरत है अद्यतन करने के लिए आप अपने प्रोजेक्ट में ormlite की पूरी एंड्रॉयड स्रोत भाग कॉपी और SQLCipher के संस्करण के लिए एंड्रॉयड के डाटाबेस पैकेज के सभी संदर्भ के आयात बदल सकते हैं।

मूल रूप से आप पैकेज है जो

android.database.sqlite

से net.sqlcipher.database

उदाहरण के लिए, करने के लिए

import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

करने के लिए

import net.sqlcipher.database.SQLiteDatabase; 
import net.sqlcipher.database.SQLiteOpenHelper; 
से मेल खाता है के सभी बदलना होगा

उसके बाद डीबी पासवर्ड परम को getWriteableDatabase के कॉल पर कॉल करें droidConnectionSource.java

+0

धन्यवाद आपके उत्तर के लिए। लेकिन जब मैं queryforall() का उपयोग कर डेटा ला रहा हूं, java.lang फेंक रहा है। NoSuchMethodError: net.sqlcipher.database.SQLiteDatabase। rawQuery। लेकिन मेरे पास sqlitedatabase कक्षा में वह विधि है। इस विचार को कैसे हल करें ??? – Roster

+0

मैंने इस पर आगे का पता नहीं लगाया। मैंने इस समय SQLCipher का उपयोग करना बंद कर दिया, वास्तव में मदद नहीं कर सकता, क्षमा करें। – Rejinderi

6

मैंने Rejinderi द्वारा patch for ORMLite 4.43 में उत्तर को डिस्टिल्ड किया है और इसे JAR file में संकलित किया है। अपने Android परियोजना में एकीकृत करने के लिए, निम्न करें:

  1. SQLCipher for Android HOWTO का पालन करें अपने प्रोजेक्ट में SQLCipher पाने के लिए
  2. अपनी परियोजना के लिए ORMLite जोड़ें (What is a good tutorial for using ORMLite with SQLite and Android देख)
  3. ormlite-android-sqlcipher.jar
  4. साथ libs/ormlite-android.jar बदलें
  5. उपयुक्त डीबी उद्घाटन विधियों के लिए अपना गुप्त डेटाबेस पासवर्ड जोड़ें

हालांकि, आपको एक अप्रबंधित जेएआर फ़ाइल प्रदान करने के लिए मुझ पर भरोसा नहीं करना चाहिए और इसके बजाय पैच में निर्माण निर्देशों का पालन करना चाहिए।

संपादित करें: समझौता पुस्तकालय के साथ, getReadableDatabase(), getWritableDatabase() के लिए कॉल और OrmLiteSqliteOpenHelper निर्माता अतिरिक्त पैरामीटर के रूप में पारित किया जा पासवर्ड की जरूरत है। यदि आप डीबी सहायक का उपयोग कर रहे हैं, तो इसे OrmLiteSqliteOpenHelper पर पासवर्ड पास करने के लिए उचित रूप से विस्तारित करें।

+0

हाँ? आपका डीबी पासवर्ड क्या है? :) – stephen

+0

मेरा "पासवर्ड" है; लेकिन मैं किस बारे में बात कर रहा था यह है कि मैंने प्रदान की गई जेएआर फ़ाइल में 'sendCovertMessageTo ("ge0rg", your_db_password)' लाइन भी हो सकती है ... – ge0rg

+1

मुझे उम्मीद नहीं थी कि आप भी इसका उत्तर दें। मुझे लगता है कि आपके बिंदु को साबित करने के लिए चला जाता है। यदि यह मूल के समान आकार के बारे में है, तो आपको कहीं भी जानकारी भेजने के लिए संसाधन/साधन कहां मिलेगा? मैं वास्तव में उत्सुक हूँ।मुझे दल्विक पर सुरक्षा की रूचि और थोड़ी समझ है। – stephen

1

ge0rg I द्वारा प्रदान किए गए पैच को लागू करने के लिए यह पाया गया कि queryForAll()NoSuchMethod exception फेंकता है। कुछ जांच के बाद मैंने पाया कि यह net.sqlcipher.Cursor लौटने वाले कच्चेQuery का परिणाम है और कर्सर द्वारा प्राप्त किया गया कर्सर (AndroidCompiledStatement में) android.database.Cursor है। मैं बस के लिए AndoridCompiledStatement के आयात संशोधित:

import net.sqlcipher.Cursor; 

और getCursor संशोधित() एक android.database.Cursor वापस जाने के लिए:

public android.database.Cursor getCursor() { ... 
इन परिवर्तनों यह मेरे लिए काम करने के लिए प्रकट होता है के साथ

। हालांकि मुझे पूरी तरह से सुनिश्चित होने के लिए थोड़ा और खेलना होगा।

0

मुझे पता है कि यह काफी पुराना धागा है। लेकिन मुझे हाल ही में उसी तरह जाना पड़ा। मैंने समाधान के लिए खोज में दो धागे पढ़े हैं: this और this

  1. मैं ge0rg के answer, यह लगभग काम किया पीछा किया, कुछ समस्याएं थीं और मैं अपने कोड के अंदर तरीकों को बदलने के लिए (मैं इसे से बचना चाहता था)।
  2. मैंने एलीओट रॉयनेट ने here का सुझाव दिया और यह अच्छा काम किया, सिवाय इसके कि मुझे पासवर्ड स्वीकार करने के लिए हेल्पर क्लास में एक विधि जोड़ने की आवश्यकता थी और मैंने इसे किया।
  3. मैं कोड मिश्रण के बजाय अधिक स्मार्ट समाधान के लिए कोड को lib में बाहर करना चाहता था, इसलिए मैं अलग-अलग lib/मॉड्यूल का निर्माण करता हूं।

और अब मेरे पास solution है जो काम करता है (आप गिटहब से काम करने वाले डेमो क्लोन कर सकते हैं)। भविष्य में दूसरों की मदद के लिए दोनों जवाबों में मेरा जवाब रखें।

+0

मैं उस परियोजना में अपनी खुद की ओआरएम परत लिखता हूं, अधिक तेज़ और साफ था। –

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