美文网首页
Android的HttpURLConnection.getInp

Android的HttpURLConnection.getInp

作者: 稀饭_言小诺 | 来源:发表于2017-11-14 18:28 被阅读0次

    问题

    软件开发一直放在安卓2.3上跑,木有问题出现,然而放在5.1的手机上出现了异常,获取不到网络数据,(╥╯^╰╥)嗯,心理咯噔咯噔,开始查错误········

    经过不懈努力,找到根源啦。(~ ̄▽ ̄)~

    HttpURLConnection.getInputStream();这句话返回的是null,

    为啥呢,服务器木有问题啊。⊙(?◇?)?

    后头了解到,谷歌工程师为了安全,规定连接网络这个耗时的操作要放到一个新线程里去运行。这是4.0更新的新特性。。

    ( ,,´•ω•)ノ"(´っω•`。)
    好啦,这下知道是什么事了。

    先上原代码:

    public void click(View view){
    
        URL url = new URL(path);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        // 设置请求方式为"GET"
        conn.setRequestMethod("GET");
        // 超时响应时间为5秒
        conn.setConnectTimeout(5000);
        //获取服务器返回的状态码
        int code=conn.getResponseCode();
        //成功
        if(code==200){
        
            //这里inputStream是null
            InputStream inputStream = conn.getInputStream();
        }
    }
    

    方案

    • 方法一:把可恶的他扔进子线程

    如下操作:

    public void click(View view){
    
      new Thread(new Runnable() {
           @Override
           public void run() {
    
               URL url = new URL(path);
               HttpURLConnection conn = (HttpURLConnection) >>url.openConnection();
               // 设置请求方式为"GET"
               conn.setRequestMethod("GET");
               // 超时响应时间为5秒
               conn.setConnectTimeout(5000);
               //获取服务器返回的状态码
               int code=conn.getResponseCode();
               //成功
               if(code==200){
                  //已解决
                  InputStream inputStream = conn.getInputStream();
               }
               
           
       }).start(); 
               
    }
    

    • 方法二

    把Mainfest.XML文件的targetSdkVersion =xx去掉就可。

    不过推荐方法一啦,根据新特性规范代码嘛··( ̄▽ ̄)~*

    Android初学者-稀饭_言小诺

    相关文章

      网友评论

          本文标题:Android的HttpURLConnection.getInp

          本文链接:https://www.haomeiwen.com/subject/qzbfvxtx.html