zoukankan      html  css  js  c++  java
  • 使用UrlConnection请求一个url地址获取内容

      访问网络需要加Internet权限:android.permission.INTERNET

      使用UrlConnection请求一个url地址获取内容:
                //1.创建一个Url对象
                    URL url = new URL(url_str);
                //2.获取一个UrlConnection对象
                    HttpURLConnection connection = (HttpURLConnection)url.openConnection();
                //3.为UrlConnection对象设置一些请求的参数,请求方式,连接的超时时间 
                    connection.setRequestMethod("GET");//设置请求方式
                    connection.setConnectTimeout(1000*10);//设置超时时间
                //4.在获取url请求的数据前需要判断响应码,200 :成功,206:访问部分数据成功   300:跳转或重定向  400:错误 500:服务器异常
                    int code = connection.getResponseCode();
                    if(code == 200){
                //5.获取有效数据,并将获取的流数据解析成String
                        InputStream inputStream = connection.getInputStream();
                        String result = StreamUtils.streamToString(inputStream);

        注意事项:
            
            1. ANR:application not response 应用无响应; androoid中耗时的操作(请求网络,大文件的拷贝,数据库的操作)需要在子线程中做。
            09-02 01:52:40.711: E/ActivityManager(857): ANR in com.itheima.sourcelook (com.itheima.sourcelook/.MainActivity)

            2. 4.0后网络操作强制在子线程中进行。因为网络访问是耗时的操作,可能会导致ANR
            09-02 01:57:32.879: W/System.err(1789):  android.os.NetworkOnMainThreadException

            3.错误线程调用异常,子线程不能够更新UI(控件的内容)
                09-02 02:02:08.873: W/System.err(1858): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

        
            主线程不能够做耗时的操作,网络请求就是耗时的操作需要放到子线程做。子线程不能更新控件的内容(更新Ui)。所以产生了矛盾,解决办法就是使用Handler.

  • 相关阅读:
    扩展Dijkstra
    CodeForces 1396E. Distance Matching
    大联盟2
    整式乘除法
    美国数学会众多教授推荐的本科&研究生代数几何经典书籍教材清单
    算法题——立方体的体对角线穿过多少个正方体?
    导数练习题
    导数压轴题
    集合
    著名数学家Ky Fan的故事
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/5774709.html
Copyright © 2011-2022 走看看