簡體   English   中英

使用HashMap在android中的兩個活動之間傳遞數據

[英]Pass data between two activities in android using HashMap

我試圖在我的android應用程序中的兩個活動之間傳遞數據,並且我想使用HashMap (我不想使用Intent )。 這是我的代碼:

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();

當我將其用於在活動1和活動2之間傳遞數據時,它將起作用,但是之后,當在活動2和活動3之間傳遞數據時, objectWeakReference.get()返回null,因此objectWeakReference.get()(Integer)會導致錯誤。 在活動2中,我再次為活動3設置數據。 我該如何解決?

我認為您應該使用這種方法

在第一個活動中設置值

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

在其他活動中獲得價值

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

當代碼到達第二個活動中的setContentView(R.layout.Some_Activity)行時,使用WeakReference<Object>將清除DataHolder類中的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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM