【发布时间】:2011-08-21 22:20:04
【问题描述】:
我在使用 URL 类从 Android 工作区中的文件读取文本时遇到问题。我得到一个 NetworkOnMainThreadException。完全相同的代码在 Android 工作区之外工作,因此它必须是网络或权限问题。我从指定的链接生成了一个基本的文本文件。 看来它在 url.openStream 上失败了。 下面是我的代码,后面是我的清单文件(我已经在其中添加了 uses-permissions 行。)
static public String[] barList()
{
ArrayList<String> bars = new ArrayList<String>();
try{
URL url = new URL("****");
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
String line = br.readLine();
while(line != null)
{
bars.add(line);
line = br.readLine();
}
br.close();
}
catch (IOException e) {
e.printStackTrace();
}
return (String[])bars.toArray();
}
这是清单文件。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="aexp.explist">
<application>
<activity android:name=".ExpList" android:label="ExpList">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
【问题讨论】:
-
异常是否暗示发生了什么?
e.getMessage() -
由于某种原因,当我调试程序时,异常没有被捕获。它没有把我带到 catch 块,而是把我带到一个“Class.class”文件。
-
当这种情况发生并且您处于 DDMS 透视图中时,单击绿色的“播放”按钮继续。如有必要,请多次执行此操作,您最终应该会在 LogCat 选项卡中看到堆栈跟踪。顺便说一句,我仅在 Internet 权限的情况下在我的模拟器中测试了您的代码,我没有收到任何错误。
-
我听从了您的建议,发现我收到了“NetworkOnMainThreadException”。我在调用从 url 打开输入流时得到了这个。我正在尝试在 Android 3.2,API 级别 13 上运行它。
-
我暂时无法访问我的 Android 开发框,但看起来在您所针对的 API 中,您不允许在主线程上执行网络操作。您可能必须将此代码移动到一个线程,或者可能是一个 AsyncTask。详情请参阅developer.android.com/reference/android/os/… 和developer.android.com/guide/practices/design/…。
标签: java android android-emulator