我有一個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陣列,我真的不明白爲什麼這是行不通的。
JSON是什麼**應該從服務器端下來,還是在嘗試創建'JSONArray'之前註銷'tekst'的值? – Devunwired 2012-07-16 19:54:05
這是來自該服務的實際JSON。我認爲代碼是正確的,但是在我的SDK中存在某種問題。完全重新安裝我的系統(包括Windows 7),但仍然是同樣的問題。 – RHAD 2012-07-17 21:29:40