Android io异常无法捕获怎么办

路伟 2017-02-20 09:44:53
java.io.IOException: ExceptionHost name may not be null。
使用httpclient联接网络,服务器地址可以自己填写,当格式天错误时,会出现这个异常,但是捕获不到,程序就会崩溃。
...全文
298 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
路伟 2017-02-20
  • 打赏
  • 举报
回复
上面博客里这个正则表达式我复制到代码里怎么报错呢。 String check = @"((http|ftp|https)://)(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\&%_\./-~-]*)?";
碼农李泽斌 2017-02-20
  • 打赏
  • 举报
回复
http://blog.csdn.net/weasleyqi/article/details/7912647
路伟 2017-02-20
  • 打赏
  • 举报
回复
域名那么多,怎么用正则表达式去验证啊?我也想过这个办法的。但是不知道怎么写这个正则表达式的。
碼农李泽斌 2017-02-20
  • 打赏
  • 举报
回复
client.execute(httpPost) 就是这句里面的参数httpPost这个错了啊,也就是你之前new HttpPost(srce)这里出问题了,那你在拼好srce这个字符串的时候,用正则匹配一下是否是一个正确的地址字符串,如果是继续执行,否则就提示用户重新输入
路伟 2017-02-20
  • 打赏
  • 举报
回复
转URL那个我是测试的。它是不用的。 HttpPost httpPost = new HttpPost(srce);参数用的不是url。 不是这行出的错。而是: HttpResponse response = client.execute(httpPost); 这行错的。这下面是logCat: 02-20 11:11:07.790: E/AndroidRuntime(23422): Process: com.vsd.mobilepatrol.vhdz, PID: 23422 02-20 11:11:07.790: E/AndroidRuntime(23422): java.lang.RuntimeException: An error occurred while executing doInBackground() 02-20 11:11:07.790: E/AndroidRuntime(23422): at android.os.AsyncTask$3.done(AsyncTask.java:309) 02-20 11:11:07.790: E/AndroidRuntime(23422): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 02-20 11:11:07.790: E/AndroidRuntime(23422): at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 02-20 11:11:07.790: E/AndroidRuntime(23422): at java.util.concurrent.FutureTask.run(FutureTask.java:242) 02-20 11:11:07.790: E/AndroidRuntime(23422): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 02-20 11:11:07.790: E/AndroidRuntime(23422): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 02-20 11:11:07.790: E/AndroidRuntime(23422): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 02-20 11:11:07.790: E/AndroidRuntime(23422): at java.lang.Thread.run(Thread.java:818) 02-20 11:11:07.790: E/AndroidRuntime(23422): Caused by: java.lang.IllegalArgumentException: Host name may not be null 02-20 11:11:07.790: E/AndroidRuntime(23422): at org.apache.http.HttpHost.<init>(HttpHost.java:88) 02-20 11:11:07.790: E/AndroidRuntime(23422): at org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:529) 02-20 11:11:07.790: E/AndroidRuntime(23422): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:519) 02-20 11:11:07.790: E/AndroidRuntime(23422): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:497) 02-20 11:11:07.790: E/AndroidRuntime(23422): at com.vsd.mobilepatrol.httpclient.Login.execute(Login.java:336) 02-20 11:11:07.790: E/AndroidRuntime(23422): at com.vsd.mobilepatrol.vhdz.LoginActivity$LoginAsyncTask.doInBackground(LoginActivity.java:816) 02-20 11:11:07.790: E/AndroidRuntime(23422): at com.vsd.mobilepatrol.vhdz.LoginActivity$LoginAsyncTask.doInBackground(LoginActivity.java:1) 02-20 11:11:07.790: E/AndroidRuntime(23422): at android.os.AsyncTask$2.call(AsyncTask.java:295) 02-20 11:11:07.790: E/AndroidRuntime(23422): at java.util.concurrent.FutureTask.run(FutureTask.java:237) 02-20 11:11:07.790: E/AndroidRuntime(23422): ... 4 more
碼农李泽斌 2017-02-20
  • 打赏
  • 举报
回复
HttpPost httpPost = new HttpPost(srce); 这一行的异常应该是。 你将srce转成URL对象,但是后面根本没用到啊,该try catch的地方没有啊
路伟 2017-02-20
  • 打赏
  • 举报
回复
我就是整个try catch 的。 代码如下。其中的app.HOST 就是界面上手动填写的地址。 请大神看一下。 HttpClient client = new DefaultHttpClient(); // 请求超时 client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 15000); // 读取超时 client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 15000); app.login_name = user_name; app.login_password = user_password; String srce="http://" + app.HOST + ":" + DataDefine.WEB_SERVICE_PORT + "/DEVICE_USER_LOGIN"; try { URL url=new URL(srce); } catch (MalformedURLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } HttpPost httpPost = new HttpPost(srce); httpPost.addHeader("Content-Type", "application/json"); Log.i("Login ","params: " + parmas.toString() ); try { httpPost.setEntity (new StringEntity (parmas.toString(), "utf-8")); HttpResponse response = client.execute(httpPost); int code = response.getStatusLine().getStatusCode(); if (code >= 200 && code < 300) { String rev = EntityUtils.toString(response.getEntity()); try { JSONObject obj = new JSONObject(rev); service_error_code = obj.getInt("error_code"); if ( service_error_code ==0 ) { Log.i("Login ","rev: " + rev); System.out.println("service_code返回值是多少:"+service_error_code); api_user_id = obj.getInt("api_user_id"); device_uuid = obj.getString("device_uuid"); session_uuid = obj.getString("session_uuid"); ogp_user_name = obj.getString("user_name"); user_id = obj.getInt("user_id"); org_name = obj.getString("org_name"); org_id = obj.getInt("org_id"); ogp_base_url = obj.optString("ogp_base_url"); ogp_about_url = obj.optString("ogp_about_url"); service_groups = obj.optJSONArray("service_groups").toString(); service_categorys = obj.optJSONArray("service_categorys").toString(); use_camera =obj.getInt("use_camera"); use_sound=obj.getInt("use_sound"); qrcode=obj.getInt("qrcode"); maptype=obj.getInt("maptype"); role_id=obj.getInt("role_id"); offline_login=obj.getInt("offline_login"); gps_range=obj.getInt("gps_range"); open_gps=obj.getInt("open_gps"); sys_version=obj.getString("sys_version"); timezone=obj.getString("timezone"); utc=obj.getString("utc"); download_api=obj.getString("download_api"); photo_valid_time=obj.getInt("photo_valid_time"); photo_rate=obj.getInt("photo_rate"); auto_location=obj.getInt("auto_location"); auto_send=obj.getInt("auto_send"); min_updates=obj.getInt("min_updates"); Log.i("Login","base_url: " + ogp_base_url); Log.i("Login","about_url: " + ogp_about_url); Resources res = app.getResources(); Bitmap bm; bm = BitmapFactory.decodeResource (res, R.drawable.default_user_icon); user_icon64 = "data:image/png;base64," + AppTool.bitmapToBase64(bm); return true; } } catch (Exception e) { e.printStackTrace(); return false; } } } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
碼农李泽斌 2017-02-20
  • 打赏
  • 举报
回复
把整个try catch进去,怎么会捕获不到??
chinahbbt 2017-02-20
  • 打赏
  • 举报
回复
如果有异常,try catch肯定可以捕获得到 如果出现了异常却没有捕获,说明你出现异常的地方没有try catch,你可以debug调试下,看看有没有其他的异常,比如权限什么的

80,357

社区成员

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

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