2011-10-25 28 views
9

Tôi có ID phiên đăng nhập mà nhiều hoạt động cần sử dụng. Làm cách nào để chia sẻ dữ liệu chung này giữa nhiều hoạt động? Hiện tại, tôi đang chuyển dữ liệu trong Intent nhưng nó không hoạt động đúng. Đối với một số hoạt động, tôi chuyển một số dữ liệu khác và dữ liệu chung bị mất.Cách chia sẻ cùng một dữ liệu giữa nhiều hoạt động

+1

những gì bạn muốn vượt qua chính xác? Và đăng mã của bạn ở đây –

+0

Bạn có thể chia sẻ dữ liệu thông qua ý định hoặc bạn có thể tạo 1 lớp toàn cầu và truy cập dữ liệu thông qua đó ... dữ liệu thông qua ý định rất đơn giản..chỉ cần phải đưa dữ liệu của bạn vào intent.putExtra (kiểu dữ liệu thích hợp) phương pháp và chia sẻ nó qua nhiều hoạt động ... – android

+0

Tôi có Đăng nhập trong ứng dụng của mình ở chỗ tôi sẽ nhận được sessionid tôi cần sử dụng nó trên tất cả các hoạt động mà bao giờ đến sau khi đăng nhập cũng tôi cần phải vượt qua một số dữ liệu khác để hoạt động tiếp theo (bao gồm cả sessionid) .Làm thế nào tôi đang cố gắng với ý định nhưng đôi khi nó chuyển hướng sang các hoạt động khác. – Harish

Trả lời

1

Một cách để làm điều đó là để mở rộng Application, và sau đó gọi getApplication vào các hoạt động của bạn. This site có một số ví dụ.

+0

giải pháp xấu, nhưng nó đã được viết cách đây rất lâu .. vì vậy tôi thúc đẩy tác giả để cải thiện nó;) – Ewoks

10

Sử dụng chia sẻ sở thích như thế này:

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

Bạn có thể lấy thông tin này trên ứng dụng của bạn như thế này:

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

Bạn nên sử dụng ý định khi bạn muốn bắt đầu một hoạt động khác từ hoạt động hiện tại của bạn ... cũng nếu hoạt động của trẻ là totall y phụ thuộc vào dữ liệu từ hoạt động cha mẹ ... ý đồ sử dụng

1

Tôi không biết chính xác những gì đang bạn đang đối phó với, nhưng có bạn đã cố gắng như thế này

trong hoạt động hiện tại của bạn, tạo ra một ý định

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

sau đó trong hoạt động khác, hãy truy xuất các giá trị đó.

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

Sử dụng lớp Singleton để chia sẻ.

mẫu mã

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; 
    } 
} 

trong Hoạt động khác/lớp để thiết lập các giá trị như:

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

Cách mà tôi làm là tôi thừa kế một lớp toàn cầu từ Hoạt động, và sau đó mở rộng tất cả các hoạt động thực tế mà người dùng sẽ tương tác với nó. Đó là cách tôi đã học để làm điều đó với một số "tìm hiểu mã cho android" sách tôi đã mua.

Điều này khá giống với việc sử dụng lớp Ứng dụng.

+0

Điều gì về rò rỉ bộ nhớ? làm thế nào để bạn chia sẻ dữ liệu? – Nico

2

Sau khi đọc tài liệu về SharedPreferences và thảo luận gần giống với flamewar về Singleton vs Application in android.

tôi kết luận: Xin bác bỏ bất kỳ kết luận

  • SharedPreferences: Tốt nếu bạn có kế hoạch để giữ chỉ nguyên thủy, và dễ dàng để giữ bưu kiện khác nhau.
  • Khuyên: Một giải pháp cấp thấp, với nhiều mã bản mẫu, bạn có thể sử dụng trong Extras
  • Có thể lập lại: Nếu bạn không muốn làm phiền với Parcelable. Xem this
  • Singleton: Lựa chọn của tôi. Đơn giản, nhanh chóng và không có bản mẫu. Đóng góp của tôi là sử dụng Bản đồ bên trong để linh hoạt.

    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); 
        } 
    } 
    
  • Ứng dụng: Hầu như giống như singleton, nhưng đối với một số lý do hide-to-me, dễ dàng kiểm tra và cách chuẩn hoá android hơn để làm việc.

0

Bạn có thể lưu trữ trong SharedPreferences hoặc trong lớp Singleton. nơi tôi sẽ đề nghị sử dụng lớp singleton.

  • SharedPreferences:

Viết giá trị

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

đọc Value

SharedPreferences mPref= getSharedPreferences("session", MODE_WORLD_READABLE); 
String sSession_id= mPref.getString("session_id", null); 
  • Singleton lớp

    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; 
        } 
    } 
    

Viết thư cho Singleton

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

đọc từ singleton

Session mSession = Session.getInstance(); 
String mSessionId = mSession.getSessionId(); 
Các vấn đề liên quan