2011-10-25 19 views
9

मेरे पास एक लॉगिन सत्र आईडी है जिसमें कई गतिविधियों का उपयोग करने की आवश्यकता है। मैं इस सामान्य डेटा को कई गतिविधियों के बीच कैसे साझा करूं? वर्तमान में, मैं इरादे में डेटा पास कर रहा हूं लेकिन यह ठीक से काम नहीं कर रहा है। कुछ गतिविधियों के लिए, मैं कुछ अन्य डेटा पास करता हूं, और आम डेटा खो जाता है।एकाधिक गतिविधियों के बीच समान डेटा कैसे साझा करें

+1

क्या आप वास्तव में पास करना चाहते हैं सिंगलटन को

Session mSession = Session.getInstance(); mSession.setSessionId("your_session_id"); 

पढ़ें? और अपना कोड यहां पोस्ट करें –

+0

आप या तो इरादे के माध्यम से डेटा साझा कर सकते हैं या आप 1 ग्लोबल क्लास बना सकते हैं और उस के माध्यम से डेटा एक्सेस कर सकते हैं ... इरादे के माध्यम से डेटा भेजना बहुत आसान है .. आपको केवल अपना डेटा intent.putExtra में रखना है (उपयुक्त डेटाटाइप) विधि और इसे कई गतिविधियों पर साझा करें ... – android

+0

मैंने अपने आवेदन में लॉगिन किया है कि मुझे सत्रिक मिल जाएगा, मुझे लॉगिन के बाद आने वाली सभी गतिविधियों में इसका उपयोग करने की ज़रूरत है, मुझे भी अगली गतिविधियों में कुछ अन्य डेटा पास करने की आवश्यकता है (सत्रीय समेत)। अब मैं इरादे से कोशिश कर रहा हूं लेकिन यह कभी-कभी अन्य गतिविधियों में बदल रहा है। – Harish

उत्तर

1

एक तरह से यह Application विस्तार करने के लिए है करने के लिए, और फिर अपनी गतिविधियों में getApplication कहते हैं। This site में कुछ उदाहरण हैं।

+0

खराब समाधान, लेकिन यह बहुत समय पहले लिखा गया था .. इसलिए मैं इसे सुधारने के लिए लेखक को निंदा करता हूं;) – Ewoks

10

उपयोग साझा इस तरह प्राथमिकताएं:

SharedPreferences myprefs= getSharedPreferences("user", MODE_WORLD_READABLE); 
String session_id= myprefs.getString("session_id", null); 

:

SharedPreferences myprefs= this.getSharedPreferences("user", MODE_WORLD_READABLE); 
myprefs.edit().putString("session_id", value).commit(); 

आप इस तरह अपने app भर में यह जानकारी प्राप्त कर सकते हैं जब आप अपनी वर्तमान गतिविधि से दूसरी गतिविधि शुरू करना चाहते हैं तो आपको इरादों का उपयोग करना चाहिए ... अगर बच्चे की गतिविधि कुल है y माता पिता गतिविधि से डेटा ... पर निर्भर उपयोग उद्देश्य

1

मुझे पता है कि वास्तव में कोड आप के साथ काम कर रहे हैं है नहीं है, लेकिन आप इस

अपने वर्तमान गतिविधियों में

तरह की कोशिश की है, कोई लक्ष्य

बनाने
Intent i = new Intent(getApplicationContext(), ActivityB.class); 
i.putExtra(key, value); 
startActivity(i); 

फिर दूसरी गतिविधि में, उन मानों को पुनर्प्राप्त करें।

Bundle extras = getIntent().getExtras(); 
if(extras !=null) { 
    String value = extras.getString(key); 
} 
5

साझा करने के लिए सिंगलटन कक्षा का उपयोग करें।

नमूना कोड

public class Category { 

    private static final Category INSTANCE = new Category(); 
    public String categoryName = ""; 
    public int categoryColor = 0; 
    public boolean status = false; 
    // Private constructor prevents instantiation from other classes 
    private Category() {} 

    public static Category getInstance() { 
     return INSTANCE; 
    } 
} 
अन्य गतिविधि/क्लास में

के रूप में मूल्य स्थापित करने के लिए:

Category cat; 
cat=Category.getInstance(); 

cat.categoryName="some name"; 
cat.status=ture; 

for getting the values every where you want in your application. 
Category cat; 
cat=Category.getInstance(); 

String sq=cat.categoryName; 
boolean stat=cat.status; 
0

तरीका है कि मुझे क्या करना है कि मैं गतिविधि से एक वैश्विक वर्ग का विस्तार, और तब सभी का विस्तार है वास्तविक गतिविधियां जो उपयोगकर्ता इसके साथ बातचीत करेंगे। इस तरह मैंने कुछ खरीदे "एंड्रॉइड के लिए कोड सीखना" किताबें खरीदीं।

हालांकि यह एप्लिकेशन क्लास का उपयोग करने जैसा है।

+0

स्मृति रिसाव के बारे में क्या? आप डेटा कैसे साझा करते हैं? – Nico

2

SharedPreferences के बारे में दस्तावेज़ पढ़ने के बाद और लगभग Singleton vs Application in android के बारे में चर्चा करने के लिए लगभग।

मैं निष्कर्ष: किसी भी निष्कर्ष खंडन कृपया

  • SharedPreferences: अच्छा अगर आप केवल पुरातन रखने के लिए योजना है, और विभिन्न पार्सल रखने के लिए आसान।
  • पार्सलबल: बहुत कम बॉयलरप्लेट कोड के साथ एक निम्न स्तर का समाधान, आप Extras
  • सेरिअलाइज़ेबल में उपयोग कर सकते हैं: यदि आप पार्ससेल के साथ परेशान नहीं करना चाहते हैं। this
  • सिंगलटन: मेरी पसंद देखें। सरल, त्वरित और कोई बॉयलरप्लेट नहीं। मेरा योगदान लचीलापन के लिए अंदर एक मानचित्र का उपयोग करना है।

    public class Config { 
    
        private static Config instance; 
        private HashMap<String, Object> map; 
    
        /*Keep doc about keys and its purpose if needed*/ 
    
        public static final String TOKEN = "token"; 
        public static final String SESSION = "sessionId"; 
    
        /** A bean with A LOT of useful user info */ 
        public static final String USER_BEAN = "userBean"; 
    
        private Config() { 
         map = new HashMap<String, Object>(); 
        } 
    
        public static final Config getInstance() { 
         if (instance == null) { 
          instance = new Config(); 
         } 
         return instance; 
        } 
    
        public void setKey(String key, Object value) { 
         map.put(key, value); 
        } 
    
        public Object getKey(String key) { 
         return map.get(key); 
        } 
    } 
    
  • आवेदन: सिंगलटन के रूप में लगभग एक ही है, लेकिन कुछ छिपाने करने वाली मुझे कारण के लिए, परीक्षण और काम करने के लिए और अधिक एंड्रॉयड Standarized तरह से कम।

0

आप इसे साझा किए गए संदर्भों में या सिंगलटन कक्षा में स्टोर कर सकते हैं। जहां मैं सिंगलटन कक्षा का उपयोग करने का सुझाव दूंगा।

  • SharedPreferences:

लिखें मूल्य

SharedPreferences mPref= this.getSharedPreferences("session", MODE_WORLD_READABLE); 
mPref.edit().putString("session_id", your_session_value).commit(); 

पढ़ें मूल्य

SharedPreferences mPref= getSharedPreferences("session", MODE_WORLD_READABLE); 
String sSession_id= mPref.getString("session_id", null); 
  • सिंगलटन वर्ग

    public class Session { 
    
        private static Session session = null; 
    
        private String mSessionId; 
    
        private Session() { 
        } 
    
        public static Session getInstance() { 
         if (session == null) { 
          session = new Session(); 
         } 
         return session; 
        } 
    
        public String getSessionId() { 
         return mSessionId; 
        } 
    
        public void setSessionId(String pSessionId) { 
         this.mSessionId = pSessionId; 
        } 
    } 
    

लिखें से सिंगलटन

Session mSession = Session.getInstance(); 
String mSessionId = mSession.getSessionId(); 
संबंधित मुद्दे