使用 HashMap 在 android 中的两个活动之间传递数据

Pass data between two activities in android using HashMap

我试图在我的 android 应用程序中的两个活动之间传递数据,我想使用 HashMap(我不想使用 意图)。这是我的代码:

DataHolder.java

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

    public static void setF_TaskId(int F_TaskId) {
        data.put("F_TaskId", new WeakReference<Object>(F_TaskId));
    }

    public static int getF_TaskId() {
        WeakReference<Object> objectWeakReference = data.get("F_TaskId");
        return (Integer)objectWeakReference.get();
    }
}

先设置值activity

DataHolder.setF_TaskId(TaskId);

获取其他价值activity

F_TaskId = DataHolder.getF_TaskId();

当我使用它在 activity1 到 activity2 之间传递数据时它会起作用,但之后当在 activity2 到 activity3 之间传递数据时, objectWeakReference.get() return null 所以转换为 (Integer) 导致错误。 在 activity2 中,我再次为 activity3 设置数据。我该如何解决?

我认为你应该使用这种方法

先设置值activity

public static DataHolder dh = new DataHolder();
DataHolder.setF_TaskId(TaskId);

获得其他方面的价值activity

DataHolder dh = FirstActivity.dh;
F_TaskId = dh.getF_TaskId();

使用 WeakReference<Object> 将在代码到达第二个 activity 中的 setContentView(R.layout.Some_Activity) 行时清除 DataHolder class 中的 data 变量。所以我使用 Object 而不是 WeakReference<Object> .

DataHolder.java

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

    public static void setF_TaskId(int F_TaskId) {
        data.put("F_TaskId", F_TaskId);
    }

    public static int getF_TaskId() {
        Object resault = data.get("F_TaskId");
        return (Integer)resault;
    }
}