2012-07-16 56 views
3

我有一個Android應用程序嘗試使用返回對象列表的WCF服務。該流正確讀取,但在嘗試將該字符串轉換爲JSONArray時拋出空的JSONException。我在JSON驗證器上檢查了JSON響應,並且這個接口確定。將輸入流轉換爲JSONArrary時發生空異常

我的WCF的ServiceContract:

[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陣列,我真的不明白爲什麼這是行不通的。

+0

JSON是什麼**應該從服務器端下來,還是在嘗試創建'JSONArray'之前註銷'tekst'的值? – Devunwired 2012-07-16 19:54:05

+0

這是來自該服務的實際JSON。我認爲代碼是正確的,但是在我的SDK中存在某種問題。完全重新安裝我的系統(包括Windows 7),但仍然是同樣的問題。 – RHAD 2012-07-17 21:29:40

回答

0

我首先建議你改變你所有的碼流監測代碼的框架解析器,所以響應塊將成爲:

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

這可能有助於保證你得到所有正確的數據向下服務器並正確格式化。這可能是你的讀者拉下角色的方式。

+0

感謝您的回覆。不幸的是,這給出了相同的JSONException。 – RHAD 2012-07-17 08:33:40

相關問題