将inputstream转换为JSONArrary时出现空异常

时间:2012-07-16 17:11:36

标签: java android json wcf arrays

我有一个Android应用程序尝试使用返回对象列表的WCF服务。流正确读取,但在尝试将字符串转换为JSONArray时抛出空JSONException。我在JSON验证器上检查了JSON响应,并且接缝正常。

我的WCF服务合同:

   [ServiceContract]
   public interface IAndroidWebService
    {
        [OperationContract]
        [WebGet(UriTemplate = "AndroidGetTenants",
            BodyStyle = WebMessageBodyStyle.WrappedRequest,
            ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Json)]
        List<TenantEntity> AndroidGetTenants();
    }

调用它时生成的JSON响应:

[{"MaxVotesPerSecond":0,"Name":"Duurzaam OV","PartitionKey":"a63569b9-e794-4674-832b-46e85de0dc0a","RowKey":"02f1654c-9746-4da5-a146-bff7fe611468"},
    {"MaxVotesPerSecond":0,"Name":"Overheid","PartitionKey":"e38f3d93-5b4d-41e9-8513-3fd350a019af","RowKey":"11ec2c3e-e65f-45cf-9c89-4aa40a2c21c7"}]

我的应用中使用的java代码:

HttpGet request = new HttpGet("http://XX.XX/WebService.svc/Android/AndroidGetTenants");        
request.setHeader("Accept", "application/json");        
request.setHeader("Content-type", "application/json");  

DefaultHttpClient httpClient = new DefaultHttpClient();        
HttpResponse response = httpClient.execute(request);       
HttpEntity responseEntity = response.getEntity();         

byte[] buffer = new byte[(int)responseEntity.getContentLength()];        
InputStream stream = responseEntity.getContent();  
stream.read(buffer);
stream.close();  
String tekst = new String(buffer,"UTF-8");                          
JSONArray tenants = new JSONArray(tekst);  

java代码抛出一个空的JSONException(catch中的参数e不存在)。似乎服务返回一个对象数组。 当我改变时:

JSONArray tenants = new JSONArray(tekst); 

JSONObject tenants = new JSONObject(tekst); 

代码抛出JSONException: Value [{"RowKey":"02f1654c-9746-4da5 ...... esPerSecond":0}] of type org.json.JSONArray cannot be converted to JSONObject

表示使用JSONArray,但是它再次抛出上面提到的空异常。

希望有人可以提供帮助。


额外信息: 此代码也抛出相同的异常:

String tekst = "[\"1\",\"2\"]";                         
JSONArray tenants = new JSONArray(tekst); 

这是一个简单的JSON数组,我真的不明白为什么这不起作用。

1 个答案:

答案 0 :(得分:0)

我首先建议您更改框架中解析器的所有流监控代码,以便响应块变为:

HttpResponse response = httpClient.execute(request);           
String tekst = EntityUtils.toString( response.getEntity() );

这可能有助于确保您从服务器获取所有正确的数据并正确格式化。这可能是读者拉下角色的方式。