2010-08-27 15 views
15

मुझे पता है कि अगर आप की तरहनई लाइन चरित्र N TextView एंड्रॉयड में ठीक से दिखाई नहीं

myTextView.setText("This is on first line \n This is on second line"); 

कुछ करना तो यह इस तरह ठीक से प्रदर्शित होगा:

यह पहली पंक्ति
पर है यह दूसरी पंक्ति

जब मैं डेटाबेस में उस स्ट्रिंग को संग्रहीत करता हूं और फिर इसे दृश्य में सेट करता हूं तो यह इस प्रकार प्रदर्शित होता है:

factView.setText(factsCursor.getString(MyDBAdapter.FACT_COLUMN)); 

मैं बस पॉप्युलेट:

यह पहली पंक्ति \ पर मैं डेटाबेस से स्ट्रिंग को निकालने के लिए उपयोग करने के कोड की पंक्ति है n इस दूसरी पंक्ति

यहाँ पर है एक टेक्स्ट फ़ाइल से डेटाबेस जहां प्रत्येक पंक्ति तालिका में एक नई प्रविष्टि है, इसलिए एक रेखा इस तरह दिखेगी "यह पहली पंक्ति पर है \ n यह दूसरी पंक्ति पर है" और इसे टेक्स्ट के रूप में संग्रहीत किया जाता है।

क्या कोई कारण है कि यह \ n अक्षरों को सही तरीके से प्रदर्शित नहीं कर रहा है? यह डेटाबेस में स्ट्रिंग के साथ कुछ करने के लिए होना चाहिए। कोई सुझाव?

+0

आपका न्यू लाइन शायद बच गए की जा रही है जब यह डेटाबेस में डाल। इसे वापस पाने के दौरान आपको इसे से बचाना होगा। – Falmarri

+1

मैं ऐसा करने के बारे में कैसे जाऊं? \ N टेक्स्ट व्यू में दिखाई देता है, इसलिए मुझे नहीं लगता कि स्क्लाइट इसे अलग कर रहा है। – Mike

उत्तर

16

जैसा कि फल्मररी ने अपनी टिप्पणी में कहा था, आपकी स्ट्रिंग डेटाबेस में डाली जाने पर बच निकली जा रही है। में रखने से पहले आप String s = unescape(stringFromDatabase) पर कॉल करके स्ट्रिंग को अनचेक कर सकते हैं और अनचेक कर सकते हैं।

एक साइड नोट के रूप में, सुनिश्चित करें कि आप उपयोगकर्ता से किसी भी प्रकार के डेटा पर DatabaseUtils.sqlEscapeString() का उपयोग कर रहे हैं या डेटाबेस में डेटा डालने पर अज्ञात परिवर्तनीय स्रोत का उपयोग कर रहे हैं। यह आपको त्रुटियों और SQL Injection से बचाएगा।

+0

SQLiteDatabase कक्षा स्वयं का ख्याल नहीं रखती है? – Andrew

+0

आपके उत्तर के बाद से यह 6 साल हो गया है। क्या आपको पता है कि ऐसा करने का कोई मौजूदा तरीका है? मेरे पास मेरे डेटाबेस से आने वाले यूनिकोड वर्ण हैं (उदाहरण के लिए, \ u2265) जो अब मुझे विश्वास है कि डेटाबेस में डालने पर बच निकले जा रहे हैं। – Brian

1

\n के बजाय \\n आज़माएं। यदि यह \ n के स्थान पर न्यूलाइन कीवर्ड का उपयोग करने से अपवाद फेंकता है .... newline एक चरित्र है, ascii 10; इसे अक्सर एक स्ट्रिंग अक्षर में दर्ज किया जाता है ... और आपके उद्देश्य की सेवा करेगा .... :)

+0

मुझे लगता है कि आप \ n सफेद जगह के साथ घूमने के लिए मतलब है। वह काम नहीं किया। मैं नई लाइन कीवर्ड का उपयोग करके क्या मतलब है इस पर थोड़ा उलझन में हूं। कोई अपवाद फेंक दिया गया था। – Mike

+0

मैंने इस पोस्ट को संपादित किया है ताकि यह स्पष्ट हो सके कि रोहन का क्या अर्थ था। – MatrixFrog

32

मैं इस सवाल पाया Austyn Mahoney के जवाब सही है, लेकिन यहाँ थोड़ी सी मदद है:

private String unescape(String description) { 
    return description.replaceAll("\\\\n", "\\\n"); 
} 

description स्ट्रिंग अपने SQLite DB

+0

डेटाबेस से टेक्स्टव्यू में \ t [टैब] कैसे प्रदर्शित करें? –

+0

महान आदमी ... सही काम कर रहा है !!! –

0

से बाहर आ जा रहा है एक पाठ क्षेत्र बहु ​​लाइन या एकल में हो सकता है लाइन मोड जब यह सिंगल लाइन मोड में होता है तो न्यूलाइन वर्ण '\ n' को रिक्त स्थान के रूप में माना जाएगा। संदेह होने पर, पर आप निम्नलिखित कोड का उपयोग कर सकते बहु लाइन मोड स्विच करने के लिए जब:

setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_MULTI_LINE); 

मैं समस्या यह है कि एक ही कोड मधुकोश पर और Froyo, जो विभिन्न चूक है लगता है पर काम नहीं किया था। जब मैं एक क्षेत्र को सिंगल लाइन के लिए मजबूर करना चाहता हूं तो अब मैं ध्वज को भी छोड़ रहा हूं।

एंड्रॉयड डॉक से:

सार्वजनिक स्थिर अंतिम पूर्णांक TYPE_TEXT_FLAG_MULTI_LINE एपीआई स्तर में TYPE_CLASS_TEXT के लिए जोड़े गए 3

करें: पाठ की कई पंक्तियों क्षेत्र में प्रवेश किया जा सकता है। यदि यह ध्वज सेट नहीं है, तो टेक्स्ट फ़ील्ड एक पंक्ति तक सीमित होगी। लगातार मूल्य: 131,072 (0x00020000)

http://developer.android.com/reference/android/text/InputType.html#TYPE_TEXT_FLAG_MULTI_LINE

से पहले आपको क्षेत्र को पॉप्युलेट ध्वज सेट करने के लिए है।

+0

मैंने अपने टेक्स्ट व्यू को न्यूलाइन दिखाने के लिए 30 मिनट तक प्रयास किया और आखिरकार मेरे ऐप से उपरोक्त कोड को निकालने के लिए क्या काम किया। मुझे यकीन नहीं है कि यह क्या होना चाहिए, लेकिन कोड की यह पंक्ति एकमात्र चीज थी जो मुझे "\ n" न्यूलाइन का उपयोग करने से रोकती थी। –

+0

यह हो सकता है कि यह ध्वज सेट किए बिना काम करता है। यह कुछ प्लेटफार्मों पर भी मेरे मामले में किया था। लेकिन ध्वज को सेट करना आपके टेक्स्टव्यू को एक पंक्ति में नहीं बदलना चाहिए। कुछ और गलत होना चाहिए। –

1
"This is on first line"||x'0A'||"This is on second line" 

|| संयोजित तार और x'0A' को कोई अनपेक्षित न्यू लाइन है।

यदि आप रिकॉर्ड डाल रहे हैं तो आपको "||x'0A'||" (यदि आपकी स्ट्रिंग को दोहराया गया है) के साथ हर नई लाइन को प्रतिस्थापित करना होगा। यह अन्य asnswers की तुलना में बेकार लग सकता है। लेकिन अगर आपके लाइनों अलग-अलग कॉलम में हैं यह भी एक का चयन में काम करता है:

SELECT firstline||x'0A'||secondline FROM wherever; 

मैंने पाया यह जबकि एक ही समस्या आप कर रहे हैं होने: http://www.mail-archive.com/[email protected]/msg43557.html

+0

न्यूलाइन एएससीआई कोड 10 है, निम्न कोड ठीक है पहली पंक्ति चुनें || x'0A '|| कहीं से दूसरी लाइन; – jasonhao

+1

आपके उत्तर में आपके पास 2 diffs: A0 और 0A है: जो सही है? – jimpanzer

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