2011-04-02 59 views
0

即時解析xml在其中的特定指定內容列表... 因此,當解析我usee散列表來存儲value.I繼續在arraylist中添加staffdata,當我發現結束元素標記我把在HashMap中顯示ArrayList對象並清除Arraylist以存儲下一個數據。arraylist也沒有在散列表中存儲

但是當我打印HashMap中,我發現只有在HashMap的關鍵是沒有的ArrayList在所有...

如果我在HashMap中那麼值在HashMap中發現puting ArrayList中後不明確的ArrayList ......但所有值來together..so我必須在哈希表放數組列表後清除數組列表...

**HERE IS MY CODE OF XML PARSING** 

    package com.example; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 

import org.xml.sax.Attributes; 
import org.xml.sax.SAXException; 
import org.xml.sax.helpers.DefaultHandler; 

public class StaffXmlHandler extends DefaultHandler 
{ 
    static int totalSection=0; 
    static HashMap<String,ArrayList<Staff>> staffListWithDesignation=new HashMap<String,ArrayList<Staff>>(); 
    ArrayList<Staff> staffList=new ArrayList<Staff>(); 
    String designationName; 

    public static HashMap<String,ArrayList<Staff>> getStaffListWithDesignation() 
    { 
     return staffListWithDesignation; 
    } 

    public void startElement(String uri, String localName, String qName, 
      Attributes attributes) throws SAXException 
    { 

     if(localName.equals("designation")) 
     { 
        designationName= attributes.getValue("name"); 
       System.out.println("=====================>>>>Designation="+designationName); 
     } 

     else if (localName.equals("staff")) 
     { 

      //System.out.println("======>>>>fetching data from staff"); 

      String employeeName = attributes.getValue("name"); 
      String employeeEmail=attributes.getValue("email"); 
      String employeePost=attributes.getValue("designation"); 
      String employeePhone=attributes.getValue("phone"); 

      Staff s=new Staff(); 
      s.setEmployeeName(employeeName); 
      s.setEmployeeEmail(employeeEmail); 
      s.setEmployeePhone(employeePhone); 
      s.setEmployeePost(employeePost); 
      staffList.add(s); 

     } 
    } 



    @Override 
    public void endElement(String uri, String localName, String qName) 
      throws SAXException 
    { 


     /** set value */ 
     if (localName.equalsIgnoreCase("designation")) 
     { 


//   Staff[] s=new Staff[staffList.size()]; 
//   System.out.println("=========================="+designationName+"======================="); 
//    for(int i=0;i<staffList.size();i++) 
//    { 
//     System.out.println("=====Record "+(i+1)+"====="); 
//     s[i]=new Staff(); 
//     s[i]=staffList.get(i); 
//     System.out.println("Name:"+s[i].getEmployeeName()); 
//     System.out.println("email:"+s[i].getEmployeeEmail()); 
//     
//     
//    } 
      ArrayList<Staff> temp=staffList; 
      staffListWithDesignation.put(designationName, temp); 

      staffList.clear(); 
      designationName=null; 
     } 


    } 
    public void endDocument() 
    { 
     System.out.println("==================End Element tag"); 

     Iterator<String> iterator =staffListWithDesignation.keySet().iterator(); 
     while (iterator.hasNext()) 
     { 
     String key = (String) iterator.next(); 
     System.out.println("=====> " + key + "======" + StaffXmlHandler.staffListWithDesignation.get(key)); 
     } 
    } 



    @Override 
    public void characters(char[] ch, int start, int length)throws SAXException 
    { 


    } 
} 

在上面代碼,請在註釋行如果我檢查,看看WHEATHER ArrayList的CONTAIN DAA OR NOT話,就說明我數據但不知道爲什麼它不存儲在HASHMAP .....

個PLS給我一些解決方案...

在此先感謝

回答

3

後你把你的名單分成地圖創建一個新的列表。當你把你的列表放入地圖中時,它不會複製它,所以你對列表的進一步操作(添加更多東西或清除它)發生在同一個列表中。

+1

如果我將創建新的ArrayList後,將值放入hashmap中... ArrayList將不能從其他方法訪問,它將數據添加到arraylist中 – 2011-04-02 08:12:25

+1

好吧,很難在上面的代碼片段中看到它。請整理一下。 – katsharp 2011-04-02 08:15:31

+1

非常感謝你的建議..... – 2011-04-02 08:16:55

1

像@kett_chup說,你不應該再使用你把在地圖後ArrayList中,你應該分配一個新的列表,就像這樣:

 staffListWithDesignation.put(designationName, staffList); 
     staffList = new ArrayList<Staff>(); 

     designationName = null; 

的staffList屬性將是可訪問其他方法,就像它在第一位。

+0

是的朋友....我做同樣的事情,我的問題解決了....感謝你guyz ... – 2011-04-02 09:33:25