2013-07-11 3 views
0

Я пытаюсь получить данные с веб-сайта, и мое приложение продолжает сбой. Я установил проблему до команды openStream(). Класс, который я использую, определен ниже. Я не могу понять, что я делаю неправильно. Любые рекомендации приветствуются.Android url.openStream() не работает

private class MyAsyncTask extends AsyncTask<Void, Void, Void>{ 

    //execute on background (out of the UI thread) 
    protected void doInBackground() { 
     URL url = null; 
     try { 
      url = new URL("URL is in here"); 

      BufferedInputStream bis = new BufferedInputStream(url.openStream()); 
      byte[] buffer = new byte[1024]; 
      StringBuilder sb = new StringBuilder(); 
      int bytesRead = 0; 
      while((bytesRead = bis.read(buffer)) > 0) { 
       String text = new String(buffer, 0, bytesRead); 
       sb.append(text); 
      } 
      bis.close(); 


     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
} 

У меня есть разрешение на использование Интернета в файле манифеста. Еще раз спасибо за любую помощь.

Вот ошибки, отображаемые в logcat.

07-11 11: 26: 31,110: Е/AndroidRuntime (9259): неустранимый: Главный 07-11 11: 26: 31,110: Е/AndroidRuntime (9259): java.lang.RuntimeException: Невозможно для запуска активности ComponentInfo {com.example.annarbormap/com.example.annarbormap.MapActivity}: android.os.NetworkOnMainThreadException 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2246) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2296) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at android.app.ActivityThread.access $ 700 (ActivityThread.java:151) 07-11 11: 26: 31.110: E/Andr oidRuntime (9259): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1281) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at android.os.Handler.dispatchMessage (Обработчик. java: 99) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at android.os.Looper.loop (Looper.java:137) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at android.app.ActivityThread.main (ActivityThread.java:5293) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at java.lang.reflect.Method.invokeNative (собственный метод) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at java.lang.reflect.Method.invoke (Method.java:511) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1102) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at com.android.inte rnal.os.ZygoteInit.main (ZygoteInit.java:869) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at dalvik.system.NativeStart.main (родной метод) 07-11 11:26 : 31.110: E/AndroidRuntime (9259): вызвано: android.os.NetworkOnMainThreadException 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java: 1118) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at java.net.InetAddress.lookupHostByName (InetAddress.java:385) 07-11 11: 26: 31.110: E/AndroidRuntime (9259) : at java.net.InetAddress.getAllByNameImpl (InetAddress.java:236) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at java.net.InetAddress.getAllByName (InetAddress.java:214) 07 -11 11: 26: 31.110: E/AndroidRuntime (9259): на libcore.net.http.HttpConnection. (HttpConnection. java: 70) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at libcore.net.http.HttpConnection. (HttpConnection.java:50) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): на libcore.net.http.HttpConnection $ Address.connect (HttpConnection.java:340) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): на libcore.net.http.HttpConnectionPool.get (HttpConnectionPool.java:87) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): на libcore.net.http.HttpConnection.connect (HttpConnection.java:128) 07-11 11: 26: 31.110 : E/AndroidRuntime (9259): на libcore.net.http.HttpEngine.openSocketConnection (HttpEngine.java:316) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): на libcore.net.http.HttpsURLConnectionImpl $ HttpsEngine.makeSslConnection (HttpsURLConnectionImpl.java:461) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): на libcore.net.http.HttpsURLConnectionImpl $ HttpsEngine.connect (HttpsURLConnectionImpl.java:433) 07-11 11:26:31.110: E/AndroidRuntime (9259): на libcore.net.http.HttpEngine.sendSocketRequest (HttpEngine.java:290) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): на libcore.net.http. HttpEngine.sendRequest (HttpEngine.java:240) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): на libcore.net.http.HttpURLConnectionImpl.getResponse (HttpURLConnectionImpl.java:282) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): на libcore.net.http.HttpURLConnectionImpl.getInputStream (HttpURLConnectionImpl.java:177) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): на libcore.net. http.HttpsURLConnectionImpl.getInputStream (HttpsURLConnectionImpl.java:271) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at java.net.URL.openStream (URL.java:462) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at com.example.annarbormap.MapActivity $ MyAsyncTask.doInBackground (M apActivity.java:77) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at com.example.annarbormap.MapActivity.onCreate (MapActivity.java:48) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at android.app.Activity.performCreate (Activity.java:5250) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at android.app.Instrumentation.callActivityOnCreate (Instrumentation. java: 1097) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2210) 07-11 11: 26: 31.110: E/AndroidRuntime (9259): ... 11 более

+0

Укажите логарифм или сообщение об ошибке. –

ответ

4

NetworkOnMainThreadException

Вы создали свои собственные методы doInBackground, но подключение к Интернету должно быть только в фоновом режиме, поместить ваш код в переопределенные методы doInbackground! См. Пример ниже:

В фоновом режиме получение данных в методе opPostExecute - настройка данных для просмотра.

private class MyAsyncTask extends AsyncTask<Void, Void, Void>{ 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     URL url = null; 
     try { 
      url = new URL("URL is in here"); 

      BufferedInputStream bis = new BufferedInputStream(url.openStream()); 
      byte[] buffer = new byte[1024]; 
      StringBuilder sb = new StringBuilder(); 
      int bytesRead = 0; 
      while((bytesRead = bis.read(buffer)) > 0) { 
       String text = new String(buffer, 0, bytesRead); 
       sb.append(text); 
      } 
      bis.close(); 

     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return yourResult; 
    } 
} 

или

private class MyAsyncTask extends AsyncTask<Void, Void, Void>{ 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     doInBackground(); //your methods 
     return null; 
    } 

    protected void doInBackground() { 
     URL url = null; 
     try { 
      url = new URL("URL is in here"); 

      BufferedInputStream bis = new BufferedInputStream(url.openStream()); 
      byte[] buffer = new byte[1024]; 
      StringBuilder sb = new StringBuilder(); 
      int bytesRead = 0; 
      while((bytesRead = bis.read(buffer)) > 0) { 
       String text = new String(buffer, 0, bytesRead); 
       sb.append(text); 
      } 
      bis.close(); 


     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

}

надежда, я могу вам помочь.

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