2012-02-17 25 views
5

मैंने अभी एंड्रॉइड के लिए अपना पहला लाइव वॉलपेपर जारी किया है। मैंने बग को अपने फोन और कई दोस्तों के फोन पर किसी भी समस्या के बिना परीक्षण किया, लेकिन स्पष्ट रूप से कुछ उपकरणों पर यह एक रिकर्सिव लूप में फंस गया है और जब उपयोगकर्ता सेटिंग बदलने की कोशिश करता है तो स्टैक ओवरफ्लो त्रुटि उत्पन्न कर रहा है।ऑन शेरड प्रिंटर कैंक्ड कुछ एंड्रॉइड डिवाइसों पर एक स्टैक ओवरफ़्लो का कारण बन रहा है

मुझे विश्वास है कि समस्या हो रही है क्योंकि मेरे पास कुछ "विषय" सेटिंग्स हैं जिन्हें कई अन्य निरंतर मूल्यों को बदलने की आवश्यकता है। उदाहरण के लिए एक विषय एक डिफ़ॉल्ट रंग, गति, पृष्ठभूमि इत्यादि सेट करेगा। ऐसा लगता है कि जब मैं Editor.commit() के साथ प्रोग्रामेटिक रूप से इन मानों को जारी रखता हूं, तो यह शेरपेरेंस पर कॉल कर रहा है, फिर से बार-बार, और फिर ...

चूंकि यह एक लाइव वॉलपेपर है, मेरे पास एक पारदर्शी वरीयता स्क्रीन के पीछे एक पूर्वावलोकन चल रहा है, और मुझे सेटिंग्स परिवर्तनों को प्रतिबिंबित करने के लिए इसकी आवश्यकता है। मुझे उपयोगकर्ता द्वारा दोनों में किए गए परिवर्तनों को प्रतिबिंबित करने के लिए स्लाइडर/रंग पिकर्स/सूची वरीयताओं की भी आवश्यकता होती है, और जब "विषय" चुना जाता है तो प्रोग्रामेटिक रूप से। ऐसा करने का सबसे आसान तरीका उन्हें SharedPreferenceChanged में वरीयता संपादक के साथ बदलना प्रतीत होता था, और वास्तव में, यह कई उपकरणों पर काम करता है।

यह सभी उपकरणों पर काम करने के लिए मैं क्या कर सकता हूं?

यहाँ प्रासंगिक कोड है:

public void onSharedPreferenceChanged(SharedPreferences prefs, String key) 
{ 


    if(key != null) 
    { 

    SharedPreferences.Editor editor = prefs.edit(); 

    hue = prefs.getInt("color", 0); 
    BG_COLOR = prefs.getInt("background_color", 0); 

//etc... 



    if(key.matches("plasma_set")) 
    { 

     plasmaAtlasName = atlasName; 
     editor.putString("atlasName", atlasName); 

     //load each bolt set with defalut values 

     if(plasmaAtlasName.equals("plasmaAtlas11")) 
     { 
      hue = 180; 
      editor.putInt("speed", 10); 
      editor.putInt("bolt_density", 2); 
      BG_COLOR = 0; 
      editor.putInt("background_color", BG_COLOR); 
      editor.putInt("color", hue); 
     } 

     if(plasmaAtlasName.equals("plasmaAtlas9")) 
     { 
      hue = 330; 
      editor.putInt("speed", 10); 
      editor.putInt("bolt_density", 2); 
      BG_COLOR = 0; 
      editor.putInt("background_color", BG_COLOR); 
      editor.putInt("color", hue); 

     } 

    //etc... 
} 

editor.commit(); 
} 
} 

उत्तर

3

ठीक है, मैं यह पता लगा। Editor.commit() को कॉल करने से पहले श्रोता को अनधिकृत करने का एक साधारण मामला था और उसके बाद इसे फिर से पंजीकृत करना था।

+0

क्या आप कुछ उदाहरण दे सकते हैं? – nAkhmedov

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