如何确认已通过OutputStream成功发送JSON文件?附代码片段
确认JSON文件是否成功发送的实用方法
嘿,我来帮你搞定这个问题!要确认JSON文件是否通过OutputStream和BufferedWriter成功发送,你可以试试这几个实用办法:
核对写入的字符/字节数
不管用哪种写入方式,都可以对比实际写入的数量和原JSON内容的大小。比如用BufferedWriter写入字符串时,可以直接拿原JSON的长度和写入操作后的结果对比(注意BufferedWriter的write(String)方法返回void,所以直接用原内容长度即可):String jsonContent = "你的JSON内容"; try { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(con.getOutputStream())); writer.write(jsonContent); writer.flush(); // 一定要flush,确保数据从缓冲区推送到流中 Log.v(TAG, "已写入字符数: " + jsonContent.length() + ",原JSON长度: " + jsonContent.length()); writer.close(); } catch (IOException e) { Log.e(TAG, "写入流时出错: " + e.getMessage()); }如果两者数值一致,说明客户端这边的写入操作是完成的,但还得结合服务器端情况确认。
开启HTTP请求的调试日志
你可以让HttpURLConnection打印详细的请求细节,包括请求体内容,这样能直观看到发送的数据:// 先设置请求头,确保JSON格式被正确识别 con.setRequestProperty("Content-Type", "application/json"); // 配合抓包工具(如Charles)查看完整请求 System.setProperty("http.proxyHost", "localhost"); System.setProperty("http.proxyPort", "8888");或者直接在Logcat里过滤
HttpURLConnection相关的日志标签,能看到请求的完整内容,包括发送的JSON。捕获写入过程中的异常
你的代码已经有try块,但一定要确保捕获IOException——如果写入过程中出现流中断、网络异常等问题,都会抛出这个异常,这时候就说明发送肯定失败了:try { // 初始化连接和流的代码 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(con.getOutputStream())); writer.write(jsonContent); writer.flush(); writer.close(); Log.v(TAG, "流写入操作完成,未出现异常"); } catch (IOException e) { Log.e(TAG, "发送JSON失败: " + e.getMessage()); // 这里可以做失败后的重试或者提示逻辑 }查看服务器端的接收日志
这是最准确的确认方式!如果服务器有日志系统,直接去看对应的请求记录,检查请求体是否和你发送的JSON完全一致,有没有缺失或乱码。毕竟客户端写入成功,不代表数据一定能到达服务器。检查服务器的响应状态
发送完数据后,获取HTTP响应码和响应内容,如果是200-299之间的状态码,说明服务器成功接收并处理了请求,间接证明数据发送成功:int responseCode = con.getResponseCode(); Log.v(TAG, "服务器响应码: " + responseCode); if (responseCode >= 200 && responseCode < 300) { // 读取服务器响应内容,进一步确认 BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream())); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); Log.v(TAG, "服务器响应内容: " + response.toString()); } else { // 读取错误响应,排查问题 BufferedReader errorReader = new BufferedReader(new InputStreamReader(con.getErrorStream())); // 处理错误信息 }
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

