【问题标题】:Android: Weird openStream on 4.0 ICSAndroid:4.0 ICS 上的奇怪 openStream
【发布时间】:2012-04-06 05:04:26
【问题描述】:

我尝试从我在文本视图中显示的网站获取文本。

我使用:

try {
         textUrl = new URL("http://google.com");
         BufferedReader bufferReader = new BufferedReader(new InputStreamReader(textUrl.openStream()));
         String StringBuffer;
               String stringText = "";
         while ((StringBuffer = bufferReader.readLine()) != null) {
          stringText += StringBuffer;
         }
               bufferReader.close();

        } catch (MalformedURLException e) {

         e.printStackTrace();

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

        }

如果我将 <uses-sdk android:targetSdkVersion> 设置为 15 (ICS 4.0.3),那么我的应用程序就会崩溃。 如果我删除那条线(意味着目标是 1.6 我猜)那么它工作正常,但我的应用程序在我的手机上缩放很奇怪。

Logcat 只是告诉我它无法启动 Activity。

//皮尤实验室

日志:

03-21 17:12:42.874: E/AndroidRuntime(2101):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:703)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at android.widget.TabHost.setCurrentTab(TabHost.java:350)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:154)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:540)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at android.view.View.performClick(View.java:3549)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at android.view.View$PerformClick.run(View.java:14400)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at android.os.Handler.handleCallback(Handler.java:605)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at android.os.Looper.loop(Looper.java:154)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at android.app.ActivityThread.main(ActivityThread.java:4944)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at java.lang.reflect.Method.invokeNative(Native Method)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at java.lang.reflect.Method.invoke(Method.java:511)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at dalvik.system.NativeStart.main(Native Method)
03-21 17:12:42.874: E/AndroidRuntime(2101): Caused by: android.os.NetworkOnMainThreadException
03-21 17:12:42.874: E/AndroidRuntime(2101):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1178)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at java.net.InetAddress.lookupHostByName(InetAddress.java:394)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:245)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at java.net.InetAddress.getAllByName(InetAddress.java:220)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at com.pewlabs.sunds.Food.downloadFile(Food.java:64)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at com.pewlabs.sunds.Food.onCreate(Food.java:45)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at android.app.Activity.performCreate(Activity.java:4524)
03-21 17:12:42.874: E/AndroidRuntime(2101):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)

【问题讨论】:

  • 发布 LogCat 错误消息。

标签: java android http inputstream


【解决方案1】:

抛出的NetworkOnMainThreadException 试图告诉您您正在主 UI 线程上执行网络操作。您需要在单独的Thread 中执行它们,或者一个简单的约定是使用AsyncTaskLoader

【讨论】:

  • 我试过异步,但我猜它加载了。但我知道如何使用 TextView 显示文本,因为异步无法控制我在主 Activity 中的 TextView
  • 使用 AsyncTask 上的 onPostExecute() 方法回发到 UI 线程。
  • 它总是被调用,问题可能出在你的实现上。
  • 一个清晰的例子可以在这里找到:developer.android.com/reference/android/os/AsyncTask.html
  • 嗯。大概。我从网站获取数据然后我想在活动中显示它。但是 Asynctask 并没有扩展我的活动,因此我无法从 asynctask 在我的 textView 上设置文本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
相关资源
最近更新 更多