簡體   English   中英

可序列化的對象到Hashmap的Arraylist

[英]Serializable object to Arraylist of Hashmap

我正在開發一個android應用程序,在其中我在Listview中顯示聯系人的所有名稱。

在聯系人列表視圖的單擊中,我需要在另一個列表視圖中顯示該聯系人的相應號碼。

這里的問題是,我捆綁了所有數字並將其發送給另一個活動,並且也收到了捆綁包,但是收到的捆綁包是Serializable對象。

因此,要在Listview中顯示,我需要將其轉換為Hashmap的Arraylist。 我怎樣才能做到這一點?

這是代碼:

發送活動:

HashMap<String, String> Numbermap = new HashMap<String, String>();

Numbermap.put("numb",number);
Numbermap.put("type",type);

NumberList.add(Numbermap);

Intent intent = new Intent (ContactNames.this,ContactsPhoneNumbers.class);

intent.putExtra("map", NumberList);


startActivity(intent);

接收活動:

    Serializable Numbermap = new HashMap<String, String>();

    //  contNum = (TextView)findViewById(R.id.ContactNumber);

    Bundle bundle = getIntent().getExtras();

    Intent intent = getIntent();

    if(bundle!=null)
    {
        Numbermap = bundle.getSerializable("map");
    }

您將意圖與鍵“ map”(即我認為是ArrayList的實例)的對象NumberList放在一起。 但是,在您的活動ContactsPhoneNumbers ,您嘗試使用鍵“ map”獲取HashMap的實例,這是不正確的。

這是您應該做的:

ArrayList<HashMap<String, String>> numberList = null;
Bundle bundle = getIntent().getExtras();
Intent intent = getIntent();
if(bundle!=null)
{
    numberList = (ArrayList<HashMap<String, String>>) bundle.getSerializable("map");
}

我按照以下方式檢查了您的代碼。

發送活動:

    HashMap<String, String> Numbermap = new HashMap<String, String>();
    ArrayList<HashMap<String, String>> NumberList = new ArrayList<HashMap<String, String>>();
    Numbermap.put("numb", "1");
    Numbermap.put("type", "type");
    NumberList.add(Numbermap);
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    intent.putExtra("map", NumberList);
    startActivity(intent);

接收活動:

ArrayList<HashMap<String, String>> NumberList = new ArrayList<HashMap<String, String>>();
        Bundle extras = getIntent().getExtras();
        NumberList = (ArrayList<HashMap<String, String>>) extras.get("map");
        System.out.println(NumberList.get(0));

我的logcat輸出是:

06-21 17:14:59.729: I/System.out(1609): {numb=1, type=type}

可能會對您有幫助。

當另一個Activity接收到時,每個Serializable對象都會反序列化為相同的對象類型。 只需將其轉換為ArrayList

ArrayList<HashMap<String, String>> numberList = (ArrayList<HashMap<String, String>>) bundle.getSerializable("map");

注意:這將向您發出編譯器警告,因為您強制轉換了泛型類型。 只要確保類型雙方都匹配,就可以忽略或抑制它。 通常,轉換泛型類型很容易出錯。 更好的解決方案是使用包含數據的可序列化的類,這是類型安全的:

public class MyNumbersClass implements Serializable {
    private static final long serialVersionUID = 1L;
    private List<Map<String,String>> data;

    public MyNumbersClass(List<Map<String,String>> data) {
        this.data = data;
    }

    public MyNumbersClass() {
    }

    public List<Map<String,String>>> getData() {
        return data;
    }
}

然后只需創建此類的實例,即可將ArrayList傳遞給構造函數。 另一方面,將Serializable MyNumbersClassMyNumbersClass並使用getData()檢索列表。

ArrayList 之謎<object>在 HashMap<div id="text_translate"><p> 我只是在運行下面的代碼,我對結果感到驚訝。 有人可以解釋一下這里發生了什么嗎? My question is.. when I set a value using an object setter into a new copy of original arraylist, why is the object value in the original arrayList also getting changed?</p><p> 如果我在這里做錯了什么,請告訴我。</p><pre> public class TestHashMap { public static void main(String[] args) { HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt; hmData = new HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt;(); ArrayList&lt;ResultData&gt; arrData = new ArrayList&lt;ResultData&gt;(); for (int i = 0; i &lt; 10; i++) { ResultData rData = new ResultData(); rData.setDy(i + 1); arrData.add(rData); } hmData.put("test",arrData); System.out.println("Before &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); ArrayList&lt;ResultData&gt; newList = new ArrayList&lt;ResultData&gt;(); newList = hmData.get("test"); ResultData rNew = newList.get(1); rNew.setDy(1234566); System.out.println("##### &gt;&gt;&gt;&gt;&gt; "+arrData.get(1).getDy()); System.out.println("After &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); }}</pre></div></object>

[英]Mystery with ArrayList<Object> in a HashMap

暫無
暫無

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

相關問題 ArrayList 之謎<object>在 HashMap<div id="text_translate"><p> 我只是在運行下面的代碼,我對結果感到驚訝。 有人可以解釋一下這里發生了什么嗎? My question is.. when I set a value using an object setter into a new copy of original arraylist, why is the object value in the original arrayList also getting changed?</p><p> 如果我在這里做錯了什么,請告訴我。</p><pre> public class TestHashMap { public static void main(String[] args) { HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt; hmData = new HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt;(); ArrayList&lt;ResultData&gt; arrData = new ArrayList&lt;ResultData&gt;(); for (int i = 0; i &lt; 10; i++) { ResultData rData = new ResultData(); rData.setDy(i + 1); arrData.add(rData); } hmData.put("test",arrData); System.out.println("Before &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); ArrayList&lt;ResultData&gt; newList = new ArrayList&lt;ResultData&gt;(); newList = hmData.get("test"); ResultData rNew = newList.get(1); rNew.setDy(1234566); System.out.println("##### &gt;&gt;&gt;&gt;&gt; "+arrData.get(1).getDy()); System.out.println("After &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); }}</pre></div></object> HashMap 不可序列化 從 hashmap 中的 arraylist 中刪除 Object 過濾添加ArrayList <object> 到HashMap 如何在ArrayList中傳遞可序列化的對象 如何正確結合Hashmap <String, ArrayList<Object> &gt;和HashMap <String, Object> 數組列表 <HashMap<String,String> &gt;到JSON對象Java ArrayList vs HashMap - 大量的迭代和對象操作 java:存儲HashMap <String, String> 在ArrayList中 <Object> 如何將對象輸入到ArrayList <HashMap<String,Object> &gt;
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM