这样用HttpURLConnection哪里出错了?

CHZiroy 2014-10-28 11:18:43

在内网开发,遇到一个下载的问题,网络编程我是新手,
图片下载地址为:http://10.13.73.25:8080/family_image/download.do?downloadfile=mmexport1412173988852.jpg

这样用httpurlconnection下载该图片,为什么回出错
private Bitmap getImageBitmap() {
URL imgUrl = null;
Bitmap bitmap = null;
try {
imgUrl = new URL("http://10.13.73.25:8080/family_image/download.do?downloadfile=mmexport1412173988852.jpg");
HttpURLConnection conn = (HttpURLConnection) imgUrl
.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();

InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}


报错如下:

10-28 11:01:57.650: W/System.err(6326): java.net.SocketException: socket failed: EACCES (Permission denied)
10-28 11:01:57.650: W/System.err(6326): at libcore.io.IoBridge.socket(IoBridge.java:576)
10-28 11:01:57.650: W/System.err(6326): at java.net.PlainSocketImpl.create(PlainSocketImpl.java:201)
10-28 11:01:57.650: W/System.err(6326): at java.net.Socket.checkOpenAndCreate(Socket.java:664)
10-28 11:01:57.650: W/System.err(6326): at java.net.Socket.connect(Socket.java:808)
10-28 11:01:57.650: W/System.err(6326): at com.android.okhttp.internal.Platform.connectSocket(Platform.java:131)
10-28 11:01:57.655: W/System.err(6326): at com.android.okhttp.Connection.connect(Connection.java:101)
10-28 11:01:57.655: W/System.err(6326): at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294)
10-28 11:01:57.655: W/System.err(6326): at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
10-28 11:01:57.655: W/System.err(6326): at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
10-28 11:01:57.655: W/System.err(6326): at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
10-28 11:01:57.655: W/System.err(6326): at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89)
10-28 11:01:57.655: W/System.err(6326): at com.example.downloadtest.MainActivity.getImageBitmap(MainActivity.java:67)
10-28 11:01:57.655: W/System.err(6326): at com.example.downloadtest.MainActivity.access$0(MainActivity.java:55)
10-28 11:01:57.655: W/System.err(6326): at com.example.downloadtest.MainActivity$1$1.run(MainActivity.java:40)
10-28 11:01:57.655: W/System.err(6326): at java.lang.Thread.run(Thread.java:841)
10-28 11:01:57.655: W/System.err(6326): Caused by: libcore.io.ErrnoException: socket failed: EACCES (Permission denied)
10-28 11:01:57.655: W/System.err(6326): at libcore.io.Posix.socket(Native Method)
10-28 11:01:57.655: W/System.err(6326): at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:181)
10-28 11:01:57.655: W/System.err(6326): at libcore.io.IoBridge.socket(IoBridge.java:561)
10-28 11:01:57.655: W/System.err(6326): ... 14 more
...全文
924 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
B111111N 2017-07-03
  • 打赏
  • 举报
回复
四楼正解....
IT-HeQian 2016-05-06
  • 打赏
  • 举报
回复
可能这个是URL地址是https的,所以会出现这样的问题
love8251025 2014-10-31
  • 打赏
  • 举报
回复
new Thread(){ public void run(){ try{ URL url=new URL("http://www.bing.com/"); HttpURLConnection connection=(HttpURLConnection)url.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("POST"); connection.setUseCaches(false); connection.connect(); DataOutputStream dos=new DataOutputStream(connection.getOutputStream()); String params=URLEncoder.encode("name=123456","gb2312"); dos.write(params.getBytes()); dos.flush(); dos.close(); InputStreamReader isr=new InputStreamReader(connection.getInputStream()); BufferedReader br=new BufferedReader(isr); String tempResult=null; String result=null; while((tempResult=br.readLine())!=null){ result+=tempResult+"\n"; } Message msg1 = new Message(); msg1.what = 100; msg1.obj = result; handler1.sendMessage(msg1); br.close(); isr.close(); }catch(IOException e){ e.printStackTrace(); } } }.start(); } }); } private Handler handler1=new Handler(){ public void handleMessage(Message msg1){ switch (msg1.what){ case 100: text.setText(msg1.obj.toString()); break; } }; }; android4.0 以后不允许主线程直接访问网络 需要new thread 这是我前几天测试的 希望对你有用
CHZiroy 2014-10-28
  • 打赏
  • 举报
回复
<uses-permission android:name="android.permission.INTERNET"/>
lca5441078 2014-10-28
  • 打赏
  • 举报
回复
android4.0后,这种代码不能写在主线程里面, 可以放在自定义的线程里面, 或者在setContentView下面加上 if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } 这个试试,不过这样写不好, 最好还是放在自己定义一个thread里面

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧