我们可以在android中的活动之间传递数据(对象)的方式有多少?

时间:2014-11-25 09:56:47

标签: android android-intent serialization

    I hope that we can pass data between android application components

通过以下方式。

1.我们可以使用intent对象传递数据,

2.我们可以实现可序列化,可分割的接口并使用intent

传递对象

3.我们可以通过扩展Application类来创建一个新类,从任何地方访问全局成员

android应用程序,

4.sharedpreference,

5.sqlite。

是否还有其他机制在Android应用程序组件之间发送数据?

3 个答案:

答案 0 :(得分:2)

另一个选择是创建ApplicationPool。

按照以下步骤操作: -  启动ApplicationPool: -

ApplicationPool pool = ApplicationPool.getInstance();

修改详细信息页面上的数据并添加到池

pool.put("key", object);

从池中获取列表页面上的修改数据

Object  object = (Object) pool.get("key");

重要说明: - 获取数据后通知列表视图或gridview

ApplicationPool类文件

public class ApplicationPool {

    private static ApplicationPool instance;
    private HashMap<String, Object> pool;

    private ApplicationPool() {
        pool = new HashMap<String, Object>();
    }

    public static ApplicationPool getInstance() {

        if (instance == null) {
            instance = new ApplicationPool();

        }

        return instance;
    }

    public void clearCollectionPool() {
        pool.clear();
    }

    public void put(String key, Object value) {
        pool.put(key, value);
    }

    public Object get(String key) {
        return pool.get(key);
    }

    public void removeObject(String key) {

        if ((pool.get(key)) != null)
            pool.remove(key);

    }
}

答案 1 :(得分:2)

另一种方法是使用静态元素,它是:

  • 静态字段(例如,公共访问)
  • 静态属性(表示包含getter和/或setter的私有字段)
  • 单身
  • 可能是嵌套类

虽然在OOP中使用静态变量是值得商榷的,但它们引入了全局状态,因此也是在活动之间实现数据共享的一种方式。

答案 2 :(得分:1)

1)WeakReferences的HashMap,例如:

public class DataHolder {
  Map<String, WeakReference<Object>> data = new HashMap<String, WeakReference<Object>>();

  void save(String id, Object object) {
    data.put(id, new WeakReference<Object>(object));
  }

  Object retrieve(String id) {
    WeakReference<Object> objectWeakReference = data.get(id);
    return objectWeakReference.get();
  }
}

在启动活动之前:

DataHolder.getInstance().save(someId, someObject);

从已发布的活动开始:

DataHolder.getInstance().retrieve(someId);

2)或奇怪的方法:在服务器O_o上存储数据