我正在尝试从我们的服务器获取JSON响应,并且当字符串长度达到大约5525个字符时,响应字符串似乎总是被截断。
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(URL);
ResponseHandler<String> responseHandler= new BasicResponseHandler();
String testResponse = httpClient.execute(post, responseHandler);
我还尝试使用HttpEntity并读取响应流。但是这也会在大约那个长度截断字符串。
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();
}
}
}
请告诉我如何处理这个问题。 我在创建它时使用这篇文章作为参考。 http://senior.ceng.metu.edu.tr/2009/praeda/2009/01/11/a-simple-restful-client-at-android/
谢谢。
答案 0 :(得分:14)
首先感谢大家的回复。
我刚刚发现问题不在于我的代码,而在于logcat显示的行数。 问题是我的json回复格式出现问题,我的解析代码出错了。所以我开始尝试通过在logcat中打印响应json字符串来调试它。这总是被截断,我猜到现在服务器本身的响应被截断了。
所以今天我开始玩响应字符串构建器,并且必须编写有趣的片段来计算字符并检测我期待的位置上的字符,并且我发现响应完全被返回。 我还在其他一些大型测试中测试了我的代码,我发现logcat对它显示的字符串的长度有限制,或者至少看起来如此。这就是为什么我的回复显示为截断的字符串,我认为这是我的代码的问题。
因为代码更早,所以它工作正常,唯一的问题是 logcat不显示完整的字符串。但事实并非如此 打扰我[至少现在]。
再次感谢大家的帮助。
答案 1 :(得分:2)
此示例演示如何操作 使用a处理HTTP响应 响应处理程序这是 推荐的执行HTTP的方法 请求和处理HTTP 响应。这种方法可以实现 调用者专注于这个过程 消化HTTP响应和 委派系统资源的任务 释放到HttpClient。指某东西的用途 HTTP响应保证了 底层HTTP连接将是 释放回连接 经理自动在所有情况下。
答案 2 :(得分:1)
服务器可能会区分您的浏览器和您的应用程序,并且响应方式不同。
破解Java代码以打印出请求和响应标头,并将它们与使用浏览器时获得的标头进行比较。
还可以尝试使用命令行中的curl
和/或wget
来执行请求。这些可以为您提供更多信息,以及设置请求标头的功能。
答案 3 :(得分:0)
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));
}
答案 4 :(得分:0)
虽然它很晚但可能会帮助别人 我使用此代码显示完整的LONG字符串。找到同一网站的某个地方
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));
}
如果发现有帮助请投票:)