我的系统基于android客户端和wcf - rest - web服务。我正在使用这个教程:http://fszlin.dymetis.com/post/2010/05/10/Comsuming-WCF-Services-With-Android.aspx我遇到了一个奇怪的问题。我有一个有效的JSON字符串(用在线工具检查过),对缓冲区的读取正常,但当我试图创建一个JSON数组时,它抛出了JSONException而没有异常变量(该变量为NULL --我以前从未遇到过)抛出异常的代码行:
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);
HttpEntity responseEntity = response.getEntity();
// Read response data into buffer
char[] buffer = new char[(int)responseEntity.getContentLength()];
InputStream stream = responseEntity.getContent();
InputStreamReader reader = new InputStreamReader(stream);
reader.read(buffer);
stream.close();
JSONArray plates = new JSONArray(new String(buffer));最后一行抛出异常。
来自该服务的文本如下:{"dtFromDate":"1899-12-30 20:00:00","fBuyWindow":120,"fNewPrice":150,"fOldPrice":400,"lLatitude":32.021327,"lLongitude":34.776452,"nDestinatedPlatform":1,"nMessageID":1,"nRange":5,"nStickingHours":48,“strDetailedDescription”:“נעלינייקמסוגN95,חולון.”,“strDisplayAddress”:“נעלינייקמסוג49,הנעלייםשללאונלמסי,בהנחהמטורפת”,“strFullAddress”:“strItemDescrpition 49,חנקין”,חולון,ישראל“strItemDescrpition”:“נעלינייקדגםN95לבן","strThumbPath":"http://images.free-extras.com/pics/n/nike_swoosh-703.jpg",”strTitle“:”נעלינייקדגם“},{”fBuyWindow“:”1899-12-30 20:00:00",“נייקקניוןחולון”:120,"fNewPrice":150,"fOldPrice":400,"lLatitude":32.021327,"lLongitude":34.776452,"nDestinatedPlatform":1,"nMessageID":2,"nRange":5,"nStickingHours":48,“strDetailedDescription”:“N95,חולון,ישראל.”,"strDisplayAddress":"","strFullAddress":"חנקין49,חולון,ישראל“,"strImagePath":"",”strItemDescrpition“:”נעלינייקדגםN95לבן","strThumbPath":"",“strTitle”:"lLatitude":32.021327,"lLongitude":34.776452,"nDestinatedPlatform":1,"nMessageID":3,"nRange":5,"nStickingHours":48,“strDetailedDescription”:“N95,הנעלייםשללאונלמסי,בהנחהמטורפת.”,“strFullAddress”:“1899-12-30 20:00:00","fBuyWindow":120,"fNewPrice":150,"fOldPrice":400,"lLatitude":32.021327,"lLongitude":34.776452,"nDestinatedPlatform":1,"nMessageID":4,”חנקיןlLongitude“:34.776452,”nDestinatedPlatform“:1,”נייקקניוןחולון“},"nRange":5,"nStickingHours":48,“strDetailedDescription”:“strImagePath,הנעלייםשללאונלמסי,בהנחהמטורפת.”,"strDisplayAddress":"",“strFullAddress”:“נעלינייקמסוג49,הנעלייםשללאונלמסי,בהנחהמטורפת”,“N95”:“”,“strThumbPath”:“strTitle”:“נייקקניוןחולון”},{"dtFromDate":"1899-12-30 20:00:00","fBuyWindow":120,"fNewPrice":150,“נעלינייקמסוגN95חולון,ישראל”,“נעלינייקדגםנייקקניוןחולון”:150,"fOldPrice":400,"lLatitude":32.021327,"lLongitude":34.776452,"nDestinatedPlatform":1,"nMessageID":5,"nRange":5,"nStickingHours":48,“strDetailedDescription”:“N95,חולון,ישראל.”,"strDisplayAddress":"",“strFullAddress”:“strImagePath 49,הנעלייםשללאונלמסי,בהנחהמטורפת”,“N95”:“”,“strThumbPath”:“נעלינייקמסוגחנקיןחולון,ישראל”,“”,“strTitle”:“נייקקניוןחולון”}
有什么建议吗?
谢谢。
发布于 2012-05-09 07:19:55
尝试以下操作。
更改此行...
char[] buffer = new char[(int)responseEntity.getContentLength()];...to使用字节数组,如下所示...
byte[] buffer = new byte[(int)responseEntity.getContentLength()];你必须忘记使用InputStreamReader,因为它只适用于char[]。取而代之的是使用...
stream.read(buffer);然后更改这一行。
JSONArray plates = new JSONArray(new String(buffer));...to this以创建一个UTF8编码字符串...
JSONArray plates = new JSONArray(new String(buffer, "UTF-8"));发布于 2012-05-08 08:54:14
我建议这样做:
String newString = reader.read(buffer); //assuming you only get one line in response, rather than many (add a loop if so)
JSONArray plates = new JSONArray(newString);这可能会有所帮助。另外,下面是我使用JSONArray编写的一些与JSON相关的代码:
public JSONArray getQuestionsJSONFromUrl(String url, List<NameValuePair> params) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
String jsonData = reader.readLine();
JSONArray jarr = new JSONArray(jsonData);
is.close();
return jarr;
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
return null;
}https://stackoverflow.com/questions/10490055
复制相似问题