Java BufferedReader未从HttpsURLConnection读取整个JSON
我试图从网站上读取JSON文本;我有网址,而且连接很好。我目前的代码是:Java BufferedReader未从HttpsURLConnection读取整个JSON,java,android,json,Java,Android,Json,我试图从网站上读取JSON文本;我有网址,而且连接很好。我目前的代码是: BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream())); String input; while ((input = br.readLine()) != null){ JSONObject j = new
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
String input;
while ((input = br.readLine()) != null){
JSONObject j = new JSONObject(input);
Log.d(TAG,j.toString(4));
}
br.close();
但是,它无法从整个HttpsURLConnection读取JSON。在为Android做日志时,我看到它在中途被切断了。我认为这可能与input或BufferedReader的大小有关,但我不确定如何继续
编辑:这是日志
在第一次建议之后仍然没有得到它
05-14 17:37:29.070 3707-3755/asundar.sharks D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
[ 05-14 17:37:29.070 3707: 3707 D/ ]
HostConnection::get() New Host Connection established 0x7f0411c26ec0, tid 3707
[ 05-14 17:37:29.120 3707: 3755 D/ ]
HostConnection::get() New Host Connection established 0x7f040937e280, tid 3755
05-14 17:37:29.140 3707-3755/asundar.I/OpenGLRenderer:初始化的EGL,版本1.4
05-14 17:37:29.210 3707-3707/asundar.E/回收视图:未连接适配器;跳过布局
05-14 17:37:29.240 3707-3707/asundar.E/回收视图:未连接适配器;跳过布局安全方式:
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuilder b = new StringBuilder();
String input;
while ((input = br.readLine()) != null){
b.append(input);
}
JSONObject j = new JSONObject(b.toString());
// this should be in finally block
br.close();
编辑
基本上,响应是完整的(基于您发送的代码),您面临的问题只是日志文本限制响应太长无法打印日志,这就是输出崩溃的原因 首先,尝试卷曲URL,查看服务器发送的内容
其次,如果您认为这与缓冲区大小有关,请将HttpsURLConnection换成ApacheHttpClient之类的连接,并从那里开始。As JSONParser将在运行时以parser.parse的形式抛出错误,以解决JSON打印问题 你可以试试下面的逻辑
String output;
JSONObject jsonObject = null;
StringBuilder stBuild = new StringBuilder();
JSONParser parser = new JSONParser();
LOGGER.debug("conn: {}", conn);
// fetching NC response in form of buffer reader.
BufferedReader br = new BufferedReader(new
InputStreamReader((conn.getInputStream())));
// reading line using bufferReader
while ((output = br.readLine()) != null) {
// parsing string into object.
stBuild.append(output);
Object obj = parser.parse(stBuild.toString());
jsonObject = (JSONObject) obj;
// casting object into JSONObject
}
我试过你的方法,但日志上什么也没显示。我创建了一个对主帖子的编辑来反映这一点。在我的示例中,我从未在这里放置日志。您可以对其进行修改并添加日志进行确认。e、 g.
Log.d(“jsontest”,j.toString())代码>下面JSONObject j..
我做了,日志根本没有显示出来。它反映在编辑中。我放置了一个日志,但没有显示任何内容。如果您不介意,请私下将您的api发送给我,我的电子邮件在我的个人资料中。RecyclerView:没有连接适配器。
这可能是另一个问题。这是另一个问题。我加了日志以防万一。现在这不是我的问题。我还没有在RecyclerView中添加任何内容。如果是这样的话,日志在您当前的版本中是不相关的。。。。你不能假设你读到的每一行都是一个完整的JSON对象,除非你对服务器的了解比这里透露的要多。我确实感到惊讶的是,显然没有提供从输入流或读取器构造JSONObject
的方法。cURL仍然只打印出JSON的一半。这是一个非常长的JSON文本。使用Apache会做什么,我将如何使用它?如果cURL只打印了一半,那么我会说服务器只发送了响应的一部分。因此,当我执行一个非Android项目并在Java中执行System.out.println()时,它打印了整个响应。我怎么能得到这整件事呢?可能是服务器超时慢读。服务器的行为可能会因代理字符串的不同而有所不同(例如)。