2011-08-30 3 views
41

असाधारण त्रुटि मुद्रित करने के लिए e.printStackTrace() विधि हैं, इसलिए मैं String में पूरा अपवाद लेना चाहता हूं और इसे Toast.makeText()
से कैसे दिखा सकता हूं मैं यह कैसे कर सकता हूं?
यदि अधिक वैकल्पिक विचार हैं, तो कृपया मेरे साथ साझा करें या मुझे सुझाव दें।e.printStackTrace(); स्ट्रिंग

Writer writer = new StringWriter(); 
exception.printStackTrace(new PrintWriter(writer)); 
String s = writer.toString(); 

वहाँ एक तरह से Log.getStackTraceString कॉल के साथ एक पंक्ति में स्ट्रिंग में एक अपवाद स्टैकट्रेस निकालने के लिए हुआ करता था:

+0

उपहार के साथ आपका लक्ष्य क्या है? क्या आपको स्वीकार्य उत्तर में दिए गए से अधिक जानकारी चाहिए, क्या आप वैकल्पिक उत्तर चाहते हैं (किस दिशा में?), क्या आप बस मौजूदा उत्तर के लिए अतिरिक्त इनाम देना चाहते हैं? इसके बारे में कुछ टिप्पणी अच्छी होगी, इसलिए उत्तर देने वाले अब आप उत्तर में क्या चाहते हैं। –

+0

मुझे इसके समाधान के बारे में अधिक जानकारी चाहिए –

उत्तर

97

कोड का निम्न भाग का प्रयोग करें। लेकिन एंड्रॉइड 4.0 (एपीआई 14) से शुरू करना यह तरीका अब विश्वसनीय नहीं है, it returns an empty stringUnknownHostException के लिए (विवरण के लिए एंड्रॉइड issue #21436 देखें, संक्षेप में: "लॉग स्पू की मात्रा को कम करने के लिए जो ऐप्स गैर-त्रुटि स्थिति में करते हैं नेटवर्क अनुपलब्ध है "एंड्रॉइड इंजीनियरों ने आईएमएचओ को Log.getStackTraceString विधि को संशोधित करने के लिए एक संदिग्ध निर्णय दिया)।

इस प्रकार इस पोस्ट की शुरुआत में प्रदान किए गए कोड का उपयोग करना बेहतर है।

+2

+1 अच्छा समाधान –

+0

वास्तविक के लिए मैंने एक ऐप विकसित किया है जिसमें बहुत से एसएफएफ़ ऐप में रह रहे हैं। और उन एसएफएफ एमुलेटर में नहीं चलते हैं इसलिए हर बार मैंने डिवाइस में इसका परीक्षण किया है। लेकिन डिवाइस में सीमा है जो त्रुटि नहीं दिखाती है। इसलिए मुझे यह समाधान पता चला है –

+0

मदद करने के लिए खुशी :) – Idolon

0

आप स्टैक ट्रेस को स्ट्रीम & से पढ़ सकते हैं।

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    PrintWriter pw = new PrintWriter(baos); 

e.printStackTrace(pw); 
String stachTrace = new String(baos.toByteArray()); 

या आप ByteArrayOutputStream के स्थान पर एक स्ट्रिंगवाइटर का उपयोग कर सकते हैं।

+0

क्यों हटाया गया था, इस प्रकार मैं स्टैक लिख सकता था टेक्स्ट फ़ाइल या कंसोल पर ट्रेस करें ताकि मैं बाद में उपयोग के लिए देख सकूं। –

+0

आप लॉगिंग फ्रेम (जो एक बेहतर विचार होगा) जैसे कि log4j, slf4j इत्यादि, –

0

अपने अपवाद संचालक उपयोग में:

StringWriter sw = new StringWriter(); 
PrintWriter pw = new PrintWriter(sw); 

e.printStackTrace(pw); 

whateverFunctionYouLikeToPrintYourStackTrace(sw.getBuffer().toString()); 

हालांकि, अगर आप बहुत से बेहतर कर रहे हैं logcat के साथ एडीबी का उपयोग कर, क्योंकि पर Toasts स्टैक ट्रेस भयानक लग रहे हो।

+0

वैसे भी टोस्ट्स पर विचार कर सकते हैं? अगर मैं कर सकता हूं तो मैं अपने स्टैकट्रैक को टेक्स्ट फ़ाइल में प्रिंट करना चाहता हूं। –

+0

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

6

यह करने योग्य है, लेकिन ऐसा मत करो। केवल त्रुटि संदेश दिखाएं (यहां तक ​​कि 'वास्तविक' उपयोगकर्ताओं के लिए भी बहुत अधिक है), पूर्ण स्टैक ट्रेस केवल लॉग पर जाना चाहिए।

+0

मैं टोस्ट संदेश –

+2

त्रुटि के रूप में मोबाइल में अपनी त्रुटि दिखाना चाहता हूं त्रुटि = = पूर्ण स्टैक ट्रेस।एक टोस्ट के रूप में दिखाया गया एक स्टैक ट्रेस ज्यादातर अपठनीय होगा। इसके अलावा यह कुछ सेकंड के बाद गायब हो जाएगा, और आपके पास इसे पढ़ने का समय नहीं होगा (क्योंकि यह काफी लंबा है)। –

50
import android.util.Log; 

... 

String stackTrace = Log.getStackTraceString(e); 
+0

उस उपयोगी 'लॉग' विधि के बारे में याद दिलाने के लिए धन्यवाद। – Idolon

+6

धन्यवाद। ऐसा लगता है कि यह ध्यान देने योग्य नहीं है :) – Macondo2Seattle

+0

अच्छा छोटा और आसान – Harinder

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