为什么Android会收到损坏的数据?

时间:2011-12-30 12:48:27

标签: java android web-services

**请求SERVER准备并向Android客户端发送整个DATA(json)作为响应**

  

{"property":[{"prop_Age":0,"prop_Area":300,"prop_Area_SqFeet":2700,"prop_Area_Unit":" Yards","prop_AvailableFor":"Sale","prop_Desc":"Ashok Vihar Phase-1, Individual House for Sale, Corner Freehold 300g Plot in (i) Block Ashok Vihar Phase I @rs 15 Cr","prop_ID":341,"prop_LastUpdatedDate":"","prop_Lease_ID":0,"prop_NumOfBaths":3,"prop_NumOfBeds":3,"prop_OnFloor":0,"prop_PostedDate":"2011-08-01","prop_Price":1.5E8,"prop_Title":"Ashok Vihar Phase-1, Individual House fo","propertyImages":[{"imageID":1042,"imageUrl":"http://localhost/barun/images/thumb.jpg","propertyID":341,"type":"thumb"},{"imageID":1043,"imageUrl":"http:////localhost/barun/images/gallery.jpg","propertyID":341,"type":"gallery"},{"imageID":1044,"imageUrl":"http:////localhost/barun/images/full.jpg","propertyID":341,"type":"full"}],"propertyLocations":{"proploc_AddressLine1":"ashok vihar phase .............................


* ANDROID收到数据并从响应中读取数据但未收到原始内容
一些数据从原始响应中截断 *

12-30 17:07:44.599: I/System.out(4348): Buffer data 
is{"property":[{"prop_Age":0,"prop_Area":300,"prop_Area_SqFeet":2700,"prop_Area_Unit":" 
Yards","prop_AvailableFor":"Sale","prop_Desc":"Ashok Vihar Phase-1, Individual House for Sale, Corner Freehold 300g Plot in 
(i) Block Ashok Vihar Phase I @rs 15  Cr","prop_ID":341,"prop_LastUpdatedDate":"","prop_Lease_ID":0,"prop_NumOfBaths":3,"prop_NumOfBeds":3,"prop_OnFloor":0,"prop_P
ostedDate":"2011-08-01","prop_Price":1.5E8,"prop_Title":"Ashok Vihar Phase-1, Individual House 
fo","propertyImages":{"phoneNumber1":0,"phoneNumber2":0,"usr_Email":"","usr_ID":341,"usr_�����������������������������������������
�����������������������������������������������������������������������������������������������������������������������������
�����������������������������������������������������������������������������������������������������������������������������
�����������������������������������������������������������������������������������������������������������������������������
�����������������������������������������������������������������������������������������������������������������������������
�����������������������������������������������������������������������������������������������������������������������������`

ANDROID代码接收数据:

int bytesRead = -1;
StringBuffer str = new StringBuffer();
byte[] bufferTest = new byte[1*1024];
try {
    while ((bytesRead = instream.read(bufferTest)) >= 0) {
        String line = new String(bufferTest);
        str.append(line.toString());
    }
} catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
System.out.println("Buffer data is" + str);

为什么Android客户端会以损坏的格式接收数据?

1 个答案:

答案 0 :(得分:2)

我有一个类似的问题。你看到垃圾数据的原因是你已经分配了1024个字节,但实际数据要少得多。其余的字节都用垃圾填充

您可以通过以下方式解决此问题

   int actual = 0;
   int length = 1024;
   responseBody = new byte[length];
   while ((bytesread < length) && (actual != -1)) {
       actual = instream.read(responseBody, bytesread, length - bytesread); //
       // Logger.log("After is.read(), actual is " + actual);
       if (actual != -1) {
           bytesread += actual;
       }
   }
   String response = new String(responseBody, "UTF-8");

(或者,对于效果更好的解决方案)

// Assuming your character set is UTF-8
InputStreamReader reader = new InputStreamReader(instream, "UTF-8");
StringBuilder b = new StringBuilder();
try {
    char[] buffer = new char[1024];
    int count;
    while ((count = reader.read(buffer)) != -1) {
        b.append(buffer, 0, count);
    }
} finally {
   reader.close();
}
String response = b.toString();

让我知道会发生什么。