HttpURLConnection抛出异常

这个问题在这里已经有了答案:

  • 我该如何解决android.os.NetworkOnMainThreadException? 49个答案

  • 出现android.os.NetworkOnMainThreadException是因为您正在主UI线程上进行网络调用。 相反,使用asynctask。

    asynctask.http://developer.android.com/reference/android/os/AsyncTask.html的文档。

    在UI线程中调用AsyncTask。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        new MyDownloadTask().execute();
    
    }
    
    class MyDownloadTask extends AsyncTask<Void,Void,Void>
    {
    
    
        protected void onPreExecute() {
          //display progress dialog.
    
     }
        protected Long doInBackground(Void... params) {
              URL url = new URL("http://www.google.com");
              HttpURLConnection con = (HttpURLConnection) url.openConnection();
              con.setDoOutput(true);
              String responseMsg = con.getResponseMessage();
              int response = con.getResponseCode();
         return null;
     }
    
    
    
     protected void onPostExecute(VOid result) {
       // dismiss progress dialog and update ui
     }
    }
    

    注意 :AsyncTask被设计成围绕Thread和Handler的助手类,并不构成通用的线程框架。 理想情况下,AsyncTasks应该用于短操作(最多几秒)。如果您需要保持线程长时间运行,强烈建议您使用java.util.concurrent pacakge提供的各种API,例如执行器,ThreadPoolExecutor和FutureTask。

    替代robospice中的asynctask。 https://github.com/octo-online/robospice。

    一些robospice的功能。

    1.异步执行(在后台AndroidService中)网络请求(例如:使用Spring Android的REST请求)。

    2.强烈键入! 您使用POJO提出您的请求,并根据请求结果获得POJO。

    3.对用于请求的POJO以及您在项目中使用的Activity类都不施加任何限制。

    4.缓存结果(在Json中使用Jackson和Gson,或者Xml,或者纯文本文件,或者二进制文件,甚至使用ORM Lite)。

    5.当且仅当他们还活着时,通知你的活动(或任何其他情况)的网络请求的结果

    6.完全没有内存泄漏,就像Android Loaders一样,不像Android AsyncTasks通知你的UI线程上的活动。

    7.使用简单但强大的异常处理模型。


    NetworkOnMainThreadException :应用程序尝试在其主线程上执行联网操作时引发的异常。

    你应该在asynctask上调用sendfeedback方法,然后只有上面的代码才能工作。 由于Web服务器花费大量时间响应主线程变得无法响应。 为了避免它,你应该在另一个线程上调用它。 因此,asynctask更好。

    http://android-developers.blogspot.in/2009/05/painless-threading.html

    链接地址: http://www.djcxy.com/p/29529.html

    上一篇: HttpURLConnection is throwing exception

    下一篇: Android : Caused by: android.os.NetworkOnMainThreadException