HttpURLConnection进行网络请求处理报错(FileNotFoundException的错误)解决

HttpURLConnection报错解决

错误来源

在之前通过Eclipse+ADT进行android开发的过程中这个FileNotFoundException:http:192.XXXX./项目(这里随便取了一个路径)可以完整的运行项目没有出现任何问题,

但是在我将项目转移到AS(Android Studio)上进行开发测试的时候,在HttpURLConnection的链接问题上却给我报错了

System.err: java.io.FileNotFoundException:
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnection)

大致是上述的问题报错,让我很纳闷,之前可以平稳运行的,迁移到AS上就不行了。

解决

  • 首先复制了错误取了百度
  • 找到了两个方法

1、注释掉setDoOutput(true)

HttpURLConnection conn;
					conn = (HttpURLConnection)new URL("http://XXXXXXXXXXXX:8080/project/androidaction/g112.action?area="+java.net.URLEncoder.encode(area)).openConnection();


					conn.setRequestMethod("GET");
					conn.setReadTimeout(3000);//设置读取超时的毫秒数
					conn.setConnectTimeout(3000);//设置连接超时的毫秒数

					//已经注释掉
					conn.setDoInput(true);
					conn.setUseCaches(false);

					input  = conn.getInputStream();//得到连接输入流
					InputStreamReader inputStreamReader = new InputStreamReader(input);
					//为得到JSON数据创建BufferedReader
					BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

					String line = "";

					while((line = bufferedReader.readLine()) != null) {
						data  = data + line+"\n";
					}

分析:

  • 若设置了conn.setRequestMethod(“GET”);
  • 同时设置setDoOutput(true),
  • 导致httpCon.setDoOutput(true),将导致请求以post方式提交,即使设置了httpCon.setRequestMethod(“GET”);
    将代码中的httpCon.setDoOutput(true);

因此我们需要对其进行删除

2、path请求路径有中文字符

现在想想也感觉奇怪,之前在Eclipse+ADT开发上这个功能可以实现,中文字符也不需要转化,但现在出现了错误,希望可以帮到大家,在我们传递参数的路径上,若是有中文数组存在,需要将其转化以下,

·java.net.URLEncoder.encode("中国");

总结
以上便是我所遇到的FileNotFoundException的报错问题,在上面两个错误改正后,我的代码能够平稳运行,希望可以帮到在学习Android开发的同学,但这不是所有的错误情况,后续如何有新的错误出现,欢迎大家补充!!

注:

个人代码问题或需要程序编写辅导服务等问题请加闲鱼【代码无bug】
或点击下面链接跳转闲鱼进行咨询

闲鱼链接

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用HttpURLConnection进行post请求的步骤如下: 1. 创建一个URL对象,指定请求的URL地址。 2. 调用URL对象的openConnection方法获取HttpURLConnection对象。 3. 设置请求的方法为POST,设置请求头信息,设置超时时间等。 4. 构建请求参数,将请求参数写入输出流中。 5. 调用HttpURLConnection对象的getInputStream方法获取服务器返回的输入流。 6. 读取输入流中的数据,将数据转换成字符串格式。 7. 关闭输入流和输出流,断开与服务器的连接。 下面是使用HttpURLConnection进行post请求的示例代码: ``` public static String doPost(String urlStr, Map<String, String> params) throws Exception { // 1. 创建一个URL对象 URL url = new URL(urlStr); // 2. 获取HttpURLConnection对象 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 3. 设置请求的方法为POST conn.setRequestMethod("POST"); // 4. 设置请求头信息 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Charset", "UTF-8"); // 5. 设置超时时间 conn.setConnectTimeout(5000); conn.setReadTimeout(5000); // 6. 构建请求参数 StringBuilder sb = new StringBuilder(); for (Map.Entry<String, String> entry : params.entrySet()) { sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8")).append("&"); } sb.deleteCharAt(sb.length() - 1); String postData = sb.toString(); // 7. 将请求参数写入输出流中 conn.setDoOutput(true); OutputStream outputStream = conn.getOutputStream(); outputStream.write(postData.getBytes()); outputStream.flush(); outputStream.close(); // 8. 获取服务器返回的输入流 InputStream inputStream = conn.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); // 9. 读取输入流中的数据,将数据转换成字符串格式 StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); inputStream.close(); // 10. 关闭输入流和输出流,断开与服务器的连接 conn.disconnect(); // 11. 返回服务器返回的数据 return response.toString(); } ``` 在调用该方法时,需要传入请求的URL地址和请求参数,请求参数以Map的形式传入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值