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

时间:2015-08-10 05:23:56

标签: java android android-activity

我试图在我的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();
    }
}

在第一项活动中设置值

DataHolder.setF_TaskId(TaskId);

获取其他活动的价值

F_TaskId = DataHolder.getF_TaskId();

当我使用它来传递activity1到activity2之间的数据时,它会起作用,但在此之后,当在activity2和activity3之间传递数据时,objectWeakReference.get()返回null,因此强制转换为(Integer)会导致错误。 在activity2中,我再次为activity3设置数据。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

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

在第一个活动中设置值

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

获取其他活动的价值

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

答案 1 :(得分:0)

当代码在第二个活动中达到WeakReference<Object>行时,使用data将清除DataHolder课程中的setContentView(R.layout.Some_Activity)变量。所以我使用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;
    }
}