我试图在我的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设置数据。我该如何解决这个问题?
答案 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;
}
}