2012-01-29 11 views
23

मैं डेटाबेस के लिए स्ट्रिंग सरणी बचाने की जरूरत है, लेकिन यह अभ्यस्त मुझे यह मैं क्या है:एंड्रॉइड: स्क्लाइट बचत स्ट्रिंग सरणी?

public long createEntry(String startTime, String endTime, String[] states) { 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(START_KEY_TIME , startTime); 
     initialValues.put(END_KEY_TIME , endTime); 
     initialValues.put(KEY_STATE, states); 
      return databaseConnect.insert(DATABASE_TABLE, null, initialValues); 
     } 

लेकिन अगर मैं इसे में स्ट्रिंग [] राज्यों डाल का कहना है कि cotentvalues ​​एक तर्क लेने में सक्षम नहीं है। मैं उसके आसपास कैसे हो सकता हूं। मुझे लगता है कि मेरे पास राज्यों में 7 चीजें हैं, क्या मुझे प्रत्येक में 7 सेपरेट स्ट्रिंग और स्टोर सामान चाहिए और फिर सभी स्ट्रिंग्स को स्ट्रिंग सरणी में वापस रखकर या क्या यह खराब अभ्यास होगा?

+0

डेटाबेस में सरणी को सहेजने की आवश्यकता क्यों है? कुछ और अच्छा समाधान होना चाहिए। –

+0

मेरे पास सप्ताह के 7 दिन हैं लेकिन यह इसे बुलियन (सत्य या गलत) के रूप में लेता है और इसे बूलियन होने की आवश्यकता होती है और चूंकि आप बूलियन को डेटाबेस में सहेज नहीं सकते हैं, इसलिए मैं स्ट्रिंग सरणी का उपयोग करने जा रहा था लेकिन यह मुझे cotentvalues ​​के कारण नहीं जाने देगा हम क्या कर सकते हैं इसपर कोई विचार? – user1175899

+0

आप बूलियन मानों को पूर्णांक 0 (झूठा) और 1 (सत्य) के रूप में संग्रहीत कर सकते हैं। –

उत्तर

67

के रूप में संग्रहीत कर सकते हैं आप स्ट्रिंग सरणी को डेटाबेस में सहेज नहीं सकते हैं। लेकिन आप इस चाल का उपयोग कर सकते हैं।

1) तो तुम convertArrayToString(String[] array) पद्धति का उपयोग करके सरल स्ट्रिंग में कन्वर्ट करना होगा। यह 'अल्पविराम' का उपयोग कर स्ट्रिंग के सभी तत्वों को जोड़ देगा।

2) जब आप डेटाबेस से यह स्ट्रिंग वापस पुनर्प्राप्त करेंगे तो आप इसे convertStringToArray(String str) विधि का उपयोग करके स्ट्रिंग सरणी में वापस परिवर्तित कर सकते हैं। यह विधि स्ट्रिंग को 'अल्पविराम' से विभाजित करेगी और आपको अपनी मूल सरणी वापस मिल जाएगी।

public static String strSeparator = "__,__"; 
public static String convertArrayToString(String[] array){ 
    String str = ""; 
    for (int i = 0;i<array.length; i++) { 
     str = str+array[i]; 
     // Do not append comma at the end of last element 
     if(i<array.length-1){ 
      str = str+strSeparator; 
     } 
    } 
    return str; 
} 
public static String[] convertStringToArray(String str){ 
    String[] arr = str.split(strSeparator); 
    return arr; 
} 
+0

के लिए नया int बनाने के बजाय यह वही बात है। जब आप बुलियन के साथ स्ट्रिंग को संयोजित करेंगे। बूलियन स्वचालित रूप से स्ट्रिंग में परिवर्तित हो जाएगा। जब आप बूलियन के ऐरे को वापस प्राप्त करेंगे, तो आपको प्रत्येक आइटम को Boolean.parseBoolean (str [i]) द्वारा बूलियन में डालना होगा। –

+0

ठीक है धन्यवाद बहुत कुछ मैं एंड्रॉइड – user1175899

+0

@MuhammadNabeelArif हे, मुझे सरणी में चेकबॉक्स चेक वैल्यू मिल रहा है। अब मैं इसे डेटाबेस में स्टोर करना चाहता हूं लेकिन अलग पंक्ति। तो यह कैसे सकारात्मक है? पूर्व के लिए: [1,2,4] यह मेरी सरणी है और मैं इसे इस तरह स्टोर करना चाहता हूं: 1 फिर नई पंक्ति और स्टोर 2 फिर नई पंक्ति और 4. यह कैसे सकारात्मक है?मैं एंड्रॉइड में नया हूं इसलिए मदद – Google

1

ऐसा लगता है कि आपका डेटाबेस डिज़ाइन नहीं किया गया है जैसा यह होना चाहिए। यदि आप SQLite डेटाबेस में बूलियन डेटा संग्रहीत करना चाहते हैं तो आप बूलियन मानों को पूर्णांक 0 (झूठा) और 1 (सत्य)

+1

yai 0, 1 के रूप में स्टोर कर सकता है लेकिन चूंकि एक से अधिक मैं int सरणी और सामग्री का उपयोग करने के लिए है कि वैसे भी इसके आसपास की अनुमति नहीं है? प्रत्येक – user1175899

7

इसे एसक्लाइट में सहेजने के लिए एकल स्ट्रिंग में कनवर्ट करें। बाद में, इसे एक स्ट्रिंग के रूप में स्क्लाइट से वापस पुनर्प्राप्त करें और इसे स्ट्रिंग के एरे में वापस परिवर्तित करें।

String ARRAY_DIVIDER = "#a1r2ra5yd2iv1i9der"; 

public String serialize(String content[]){  
    return TextUtils.join(ARRAY_DIVIDER, content); 
} 

public String[] derialize(String content){ 
    return content.split(ARRAY_DIVIDER); 
} 
+0

यह देर हो सकता है लेकिन ... मैं इस आलसी विधि – Lobstw

+0

@ लोबस्टव के नकारात्मक पक्ष के बारे में नहीं सोच सकता, अगर यह '' 'सामग्री के तत्वों में से एक है, तो' अप्रत्याशित व्यवहार हो सकता है। '" # a1r2ra5yd2iv1i9der "' ''। यह क्रमबद्ध किया जाएगा, लेकिन deserialization पर, अस्पष्टता परिणामस्वरूप एक स्ट्रिंग तत्व के स्थान पर दो खाली स्ट्रिंग तत्वों का परिणाम होगा। यदि कार्यक्रम के अन्य क्षेत्रों में सरणी आकार के सख्त निष्पादन हैं, तो इससे अवांछित व्यवहार हो सकता है। – snapfractalpop

+0

@snapfractalpop हाँ यह सही है लेकिन विभाजक को एक लंबी अल्फान्यूमेरिक स्ट्रिंग बनाने से अधिकांश मामलों में ~ 100% मामलों में – Lobstw

7

मोहम्मद जवाब के आधार पर लेकिन सरणी के बजाय स्ट्रिंग्स की सूची संभालती है और मूल्यों संयोजन के लिए स्ट्रिंग के बजाय StringBuffer उपयोग करता है:

private static String LIST_SEPARATOR = "__,__"; 

public static String convertListToString(List<String> stringList) { 
    StringBuffer stringBuffer = new StringBuffer(); 
    for (String str : stringList) { 
     stringBuffer.append(str).append(LIST_SEPARATOR); 
    } 

    // Remove last separator 
    int lastIndex = stringBuffer.lastIndexOf(LIST_SEPARATOR); 
    stringBuffer.delete(lastIndex, lastIndex + LIST_SEPARATOR.length() + 1); 

    return stringBuffer.toString(); 
} 

public static List<String> convertStringToList(String str) { 
    return Arrays.asList(str.split(LIST_SEPARATOR)); 
} 
2

यह आसान होगा यदि आप JSONArray के तार की सरणी कनवर्ट करते हैं, ToString का उपयोग करें और फिर, इसे JSONArray में पहले पार्स करके पुनर्प्राप्त करें और फिर इसे स्ट्रिंग्स

+0

स्वीकार्य उत्तर से यह एक बेहतर तरीका है क्योंकि आप कभी भी विभाजक स्ट्रिंग (जैसे '__, __' या '# a1r2ra5yd2iv1i9der' इत्यादि) द्वारा काट नहीं पाएंगे, सरणी तत्वों में से एक में पाए जाते हैं –

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