2011-04-04 117 views
1

IM在Android和正從我的HTTP XML代碼中含有大量的垃圾價值在塔河端響應..我如何刪除垃圾的工作... 請建議垃圾價值

我的XML字符串垃圾值是

<player><id>1</id><name>sachin</name><value>98</value></player>ÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ 

這裏是即時創建陣列和返回它的值

private ArrayList<String> id = new ArrayList<String>(); 
    private ArrayList<String> name = new ArrayList<String>(); 
    private ArrayList<String> score = new ArrayList<String>(); 
    private ArrayList<String> value = new ArrayList<String>(); 

    public ArrayList<String> getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id.add(id); 
    } 

    public ArrayList<String> getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name.add(name); 
    } 

    public ArrayList<String> getScore() { 
     return score; 
    } 
    public void setScore(String score) { 
     this.score.add(score); 
    } 

    public ArrayList<String> getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value.add(value); 
    } 

代碼,這是從那裏IM ACC代碼噝聲值:

Boolean currentElement = false; 
String currentValue = null; 
public static ScoreList scorelist = null; 

public static ScoreList getScorelist() { 
    return scorelist; 
} 

public static void setScoreList(ScoreList scorelist) { 
    XMLHandler.scorelist = scorelist; 
} 

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

    currentElement = true; 

    if (localName.equals("id")) 
    { 
     /** Start */ 
     scorelist = new ScoreList(); 
     }else if (localName.equals("id")) { 
     }else if (localName.equals("name")) { 
     }else if (localName.equals("score")) { 
     }else if (localName.equals("value")) { 
    } 

    } 

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

    currentElement = false; 

      if (localName.equalsIgnoreCase("id")) 
      scorelist.setId(currentValue); 
     if (localName.equalsIgnoreCase("name")) 
      scorelist.setName(currentValue); 
     else if (localName.equalsIgnoreCase("score")) 
      scorelist.setScore(currentValue); 
     else if (localName.equalsIgnoreCase("value")) 
      scorelist.setValue(currentValue); 

    } 

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

     if (currentElement) { 
      currentValue = new String(ch, start, length); 
      currentElement = false; 
     } 

    } 

在這裏我的HTTP代碼我給字節長度也但仍是給垃圾值..因爲它是拋出空指針和串出界異常..我的代碼是

   UrlEncodedFormEntity p_entity = new UrlEncodedFormEntity(nvps,HTTP.UTF_8); 
       httppost.setEntity(p_entity); 
       HttpResponse response = client.execute(httppost); 
       Log.v(TAG, response.getStatusLine().toString()); 
       HttpEntity responseEntity = response.getEntity(); 
       InputStream in=responseEntity.getContent(); 

       byte[] bData = new byte[1024]; 
       in.read(bData); 
       System.out.println("In Data"+in.toString()); 
       String st=new String (bData); 

       SAXParserFactory spf = SAXParserFactory.newInstance(); 
       SAXParser sp = spf.newSAXParser(); 
       XMLReader xr = sp.getXMLReader(); 

       System.out.println("Response from server"+responseEntity); 
       XMLHandler myXMLHandler = new XMLHandler(); 
       xr.setContentHandler(myXMLHandler); 
       xr.parse(retrieveInputStream(responseEntity)); 
+1

我猜測垃圾信息實際上並不是通過HTTP發送的,而是在讀取時發生錯誤(比如忽略read()調用的返回值)。向我們展示用於閱讀的代碼。 – 2011-04-04 09:42:11

回答

4

的長度,如我所料。在此代碼:

byte[] bData = new byte[1024]; 
in.read(bData); 
System.out.println("In Data"+in.toString()); 
String st=new String (bData); 

你讀一些文本,然後轉換整個byte[]String,即使你沒有填滿整個byte[]read -call。另外,如果有更多數據(即,如果您的內容超過1024個字節),您將忽略它。

這個最簡單的解決方法是使用一個InputSourceInputStream它的自我直接:

xr.parse(new InputSource(in)); 

SAX解析器已經知道如何處理InputStream和做所有這一切爲您服務。沒有必要重新實現這種行爲。

如果絕對必須讀取內存中的整個反應,那麼你就需要使用這樣的代碼(但我不會鼓勵這種):

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
byte[] buf = new byte[1024]; 
int read; 
while ((read=in.read(buf))!=-1) { 
    baos.write(buf, 0, read); 
} 
byte[] output = baos.toByteArray(); 

另外請注意,此轉換爲String是不平凡的,因爲XML可以有任何編碼,並且您需要檢測正確的編碼以正確地將byte[]轉換爲String

0

您必須知道您讀取了多少字節,然後用此值截斷。你

還可以得到Content-Length頭,並用它來確定身體

+0

從MySQL獲取數據。所以長度不能固定...請建議選項 – Sam 2011-04-04 09:53:52