当string太长时会被截断

我试图从我们的服务器得到一个JSON响应,并且当string长度达到大约5525个字符时,响应string似乎总是被截断。

HttpClient httpClient = new DefaultHttpClient(); HttpPost post = new HttpPost(URL); ResponseHandler<String> responseHandler= new BasicResponseHandler(); String testResponse = httpClient.execute(post, responseHandler); 

我也尝试过使用HttpEntity并读取响应stream。 但是,这也大约截断了string的长度。

  HttpClient httpClient = new DefaultHttpClient(); HttpPost post = new HttpPost(URL); // HttpGet get = new HttpGet(URL); HttpResponse response = null; HttpEntity entity = null; InputStream inputStream = null; BufferedReader reader = null; String result = ""; try { response = (HttpResponse)httpClient.execute(post); entity = response.getEntity(); if(entity != null){ inputStream = entity.getContent(); } reader = new BufferedReader(new InputStreamReader(inputStream), 8000); StringBuffer builder = new StringBuffer(""); String line = reader.readLine(); while(line != null){ Log.v(tag, "int max::::::::: "+Integer.MAX_VALUE); Log.v(tag, "LINE::::::::: "+line+reader.toString()); Log.v(tag, "reader::::::::: "+reader.toString()); builder.append(line+"\n"); line = reader.readLine(); } inputStream.close(); result = builder.toString(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ if(inputStream != null){ try{ inputStream.close(); }catch(IOException e){ e.printStackTrace(); } } } 

请让我知道我可以如何处理这个问题。 我创build这个时使用这个职位作为参考。 http://senior.ceng.metu.edu.tr/2009/praeda/2009/01/11/a-simple-restful-client-at-android/

谢谢。

Solutions Collecting From Web of "当string太长时会被截断"

首先感谢大家的回复。

我刚刚发现问题不在于我的代码,而是logcat显示的行数。 问题是我得到了我的JSON回复格式的问题,我的parsing代码吐出一个错误。 所以我开始尝试通过在logcat中打印响应jsonstring来进行debugging。 这总是被截断,直到现在我猜测,服务器本身的响应被截断了。

所以今天我开始玩响应string生成器,并写了有趣的片段来计算字符,并检测我期待的位置的字符,我发现响应被完全返回。 我也testing了一些其他的大型刺激我的代码,我发现logcat的显示string的长度有限制,或者至less看起来如此。 这就是为什么我的回应被显示为截断的string,我认为它与我的代码的问题。

所以它是工作正常,因为代码更早,唯一的问题是logcat不显示完整的string。 但这并不妨碍我[至less现在]。

再次感谢大家的帮助。

使用BasicResponseHandler

本示例演示如何使用响应处理程序处理HTTP响应。 这是执行HTTP请求和处理HTTP响应的推荐方式。 这种方法使调用者能够专注于消化HTTP响应的过程,并将系统资源释放的任务委托给HttpClient。 HTTP响应的使用保证底层HTTP连接在所有情况下都会自动释放回连接pipe理器。

服务器可能会告诉您的浏览器和您的应用程序之间的差异,并作出不同的响应。

破解你的Java代码,打印出请求和响应头文件,并将它们与使用浏览器时获得的头文件进行比较。

也可以尝试使用curl和/或wget从命令行执行请求。 这些给你更多的信息,加上设置请求头的能力。

String line = reader.readLine();

我相信你的程序中的上述行是问题。 它从服务器响应和String行读取一行。 如果服务器响应中有换行符(\ n),那么阅读器将无法读取该行。

使用以下来避免..

if(responseCode == HttpURLConnection.HTTP_OK){

  InputStream in = ((URLConnection) httpConnection).getInputStream(); int len = 0; byte[] data1 = new byte[1024]; while ( -1 != (len = in.read(data1)) ) dataFromServer.append(new String(data1, 0, len)); } 

虽然它相当晚,但可能会帮助别人我使用此代码来显示完整的长string。 在同一网站上find某处

 int maxLogSize = 1000; for(int i = 0; i <= veryLongString.length() / maxLogSize; i++) { int start = i * maxLogSize;< int end = (i+1) * maxLogSize; end = end > veryLongString.length() ? veryLongString.length() : end; Log.v(TAG, veryLongString.substring(start, end)); } 

请投票,如果发现有帮助:)