2013-10-05 4 views
0

Добрый день,Android - Чтение содержимого TXT-файла из Интернета

У меня возникли проблемы с чтением содержимого TXT-файла на моем веб-сервере.

Ниже приведен мой код, который у меня есть, и у меня есть разрешение на использование в моем манифесте. Я не уверен, что не так. Я пробовал следовать множеству руководств о том, как читать содержимое .txt-файла в Интернете, но пока ничего не удалось.

Код: songlistURL = "http://some.com/website/file.txt"; URL u = null;

try { 
u = new URL(songlistURL); 
HttpURLConnection c = (HttpURLConnection) u.openConnection(); 
c.setRequestMethod("GET"); 
c.connect(); 

InputStream in = c.getInputStream(); 
final ByteArrayOutputStream bo = new ByteArrayOutputStream(); 
byte[] buffer = new byte[1024]; 
in.read(buffer); 
bo.write(buffer); 
textFileStr = bo.toString(); 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (ProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

Log.d("text file", "" + textFileStr); 

Я действительно устал, так что я может быть просто мозг пукает что-то, но я не получаю выход ошибки LogCat либо:

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.stillbent.staybent/com.stillbent.staybent.Samples}: android.os.NetworkOnMainThreadException 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2136) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2174) 
at android.app.ActivityThread.access$700(ActivityThread.java:141) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1267) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5059) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.os.NetworkOnMainThreadException 
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1131) 
at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
at java.net.InetAddress.getAllByName(InetAddress.java:214) 
at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70) 
at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315) 
at libcore.net.http.HttpEngine.connect(HttpEngine.java:310) 
at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 
at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) 
at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80) 
at com.stillbent.staybent.Samples.onCreate(Samples.java:61) 
at android.app.Activity.performCreate(Activity.java:5058) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100) 
... 11 more 

ли кто-нибудь сможет указать мне в праве возможно, направление?

Спасибо заранее, Ник

+0

Также код должен фиксировать количество байтов, считанных методом read(), и использовать его для write(). – NormR

ответ

1

Вы получаете 'NetworkOnMainThreadException'.

Вы не должны делать никаких блокирующих операций в основном потоке - это блокирует обработку пользовательского интерфейса.

Вы должны поместить свой сетевой код в AsyncTask.

+0

Спасибо за направление. Мне жаль, что я пропустил это в ловушке. Я создал файл класса под названием «TextFromWeb.java» и переместил весь приведенный выше код в свой новый файл класса. Чтобы назвать это, я использую: новый TextFromWeb(). Execute (txt); , а затем для проверки: Log.d ("txt", "" + txt); И, похоже, это приведет к сокращению ожидаемых данных. Спасибо за руководство. –

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