我几乎没有学过HTTP网络传输方面的知识,但由于最近的项目需求,需要用到百度的翻译API服务。 String strUrl = "http://openapi.baidu.com/public/2.0/bmt/translate?client_id=9tdS6VTLddEQ8oo3lEk6w94M&q=today&from=auto&to=auto"; String JSONtext = null; try{ URL url = new URL(strUrl); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = reader.readLine()) != null){ JSONtext = line; } reader.close(); conn.disconnect(); }catch (Exception e){ e.printStackTrace(); } if(JSONtext != null){ TextView tv = (TextView)findViewById(R.id.tv); tv.setText(JSONtext); } 运行后发现执行到 conn.connect();这句就抛出异常了。 如果有可能,希望能顺便介绍一下Android/JAVA 有关HTTP方面编成的相关知识(有找过一些,但是写的都很杂乱,希望能有个整理的好一点的),谢谢~ |
|
真的想解决问题就把异常信息拿出来溜溜,藏着干嘛使啊
|
|
json数据时后台返回来给客户端的。客户端只需要解析就好了.
还有就是楼主可以先给HttpURLConnection设置几个参数啊 比如请求方法,超时等。直接connect肯定会异常 |
|
贴出错误信息,
|
|
我是用的AS,在调试模式,使用F8 StepOver,到catch语句完之后,显示的异常是”” 捕获的异常是: |
|
捕获的异常是: |
|
捕获的异常是: |
|
40分 |
访问网络的操作,android不让放在主线程,将其放在分线程即可! |
网上找了下,原来使用强制忽略这个政策也是可以的: 不过你说的使用分线程访问网络应该是官方比较推荐的方法。 |
|
① 阅读服务端的接口文档
② 简要进行测试 ③ 创建一个Activity ④ 使用AsyncHttpClient发请求【权限】 // ① 阅读服务端的接口文档 // http://api.yi18.net/news/list // ② 简要进行测试 // ③ 创建一个Activity // ④ 使用AsyncHttpClient发请求 AsyncHttpClient client = new AsyncHttpClient(); // 请求发送类 AsyncHttpResponseHandler responseHandler = new AsyncHttpResponseHandler() { try { // ⑤ 转换成java对象gson // gson.fromJson(数据, 类); System.out.println(data); // ⑥ 布局/添加事件 } // 回调函数:失败 } String url = “http://api.yi18.net/news/list”; ⑤ 转换成java对象gson // 控件 // 返回列表行数 // 返回指定下标的数据 // 返回指定下标的视图id // 返回视图,显示指定下标的数据 // 视图 TextView title=(TextView) view.findViewById(R.id.title); //设置 //设置给控件 } |
|
防止程序出现无响应,放在分线程,保持UI线程对用户操作的响应! |
|
捕获的异常是:
android.os.NetworkOnMainThreadException e.printStackTrace();执行后却没看见Console里有任何输出。。。 访问网络的操作,android不让放在主线程,将其放在分线程即可! 网上找了下,原来使用强制忽略这个政策也是可以的: StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build()); 不过你说的使用分线程访问网络应该是官方比较推荐的方法。 |
|
查看了下分线程的使用,不过我的Handler对象却没有sendMessage和handleMessag方法,这是什么情况? |
|
晕了,是我载入错了Package的问题,对android开发还很陌生。。。真是惭愧了。。。 |