2012-07-01 2 views
4

Я использую android 2.3.3, я сделал rss-ридер, который отлично работал, а затем я интегрировал код этого простого rss-считывателя в другое действие, просто скопируйте его вставить, там.Не удается подключиться с помощью httpconnection в android

Проблема в том, когда я запускаю приложение на своем эмуляторе, оно дает мне ошибку, связывающую исключение. Затем я понял, поставив тосты после каждой строки в блоке try, что проблема находится на линии httpconnection.connect();.

Я добавил разрешение в манифест андроида, в то время как мой logcat дает предупреждение javaio exception:error connecting.

try { 
     HttpURLConnection httpURLConnection = (HttpURLConnection) connection; 
     //Toast.makeText(this, "urlconnection passed", Toast.LENGTH_SHORT).show(); 
     httpURLConnection.setAllowUserInteraction(false); 
     httpURLConnection.setInstanceFollowRedirects(true); 
     //Toast.makeText(this, "setting response method", Toast.LENGTH_SHORT).show(); 
     httpURLConnection.setRequestMethod("GET"); 
     //Toast.makeText(this, "connecting", Toast.LENGTH_SHORT).show(); 
     httpURLConnection.connect(); 
     Toast.makeText(this, "on response code", Toast.LENGTH_SHORT).show(); 
     response = httpURLConnection.getResponseCode(); 
     //Toast.makeText(this, "response code passed", Toast.LENGTH_SHORT).show(); 
     if (response == HttpURLConnection.HTTP_OK) { 
      //Toast.makeText(this, "OK", Toast.LENGTH_SHORT).show(); 
      inputStream = httpURLConnection.getInputStream(); 
     } 

    } catch (Exception e) { 
     // TODO: handle exception 
     throw new IOException("Error connecting"); 
    } 

Вот код, который создает объект:

URL url = new URL(UrlString); 
URLConnection connection = url.openConnection(); 
if (!(connection instanceof HttpURLConnection)) 
    throw new IOException("Not a HTTP connection"); 
+0

убедитесь, что у вас есть <использует-разрешение андроида: имя = «android.permission.INTERNET» /> в manifast –

+0

я уже включили, что в моем файле манифеста – Salik

+0

шоу кода, где вы создали объект соединения –

ответ

1

Это дает networkonmainthread исключение

Это означает, что вы делаете сетевые операции на главном потоке, и это не разрешено в строгом режиме.

«В основном потоке», как правило, означает, что вы делаете это в обработчики событий, как onResume, , или в onClick методе вашего OnClickListener. Вы можете посмотреть этот пост (Painless threading), чтобы понять, в чем проблема, и почему это не разрешено. Как правило, если вы выполняете сетевые операции в основном потоке, это блокирует обработку событий GUI, и если сетевая операция была медленной, ваше приложение не реагировало бы.

Strict Mode появился в уровне API 9, так что это объясняет то, почему у вас есть проблема, если мин SDK версии 10, и почему она работает с мин SDK версии 8.

Вы должны использовать AsyncTask или другие методы, чтобы сделать это на заднем фоне. Для этого вы можете обратиться к 1.

Смежные вопросы