【发布时间】:2012-11-02 23:09:52
【问题描述】:
所以我在 java 和 android 中有完全相同的代码,但由于某种原因,在 android 方法 get() 中总是无法完成工作并返回 false,但在标准 java 中它工作得很好。而且我确实在清单中拥有 Internet 权限。
代码如下:
public boolean get(){
try {
jsonObject = new JSONObject(readUrl(url)); // Ignore JSON thing.
return true;
} catch (Exception ex) {
return false;
}
}
private String readUrl(String urlString) throws Exception {
BufferedReader reader = null;
try {
URL url = new URL(urlString);
reader = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuffer buffer = new StringBuffer();
int read;
char[] chars = new char[1024];
while ((read = reader.read(chars)) != -1) {
buffer.append(chars, 0, read);
}
return buffer.toString();
} finally {
if (reader != null) {
reader.close();
}
}
}
【问题讨论】:
-
你在AndroidManifest.xml中添加INTERNET权限了吗?
-
有,忘记说了。
-
打印堆栈跟踪并添加到您的问题中。它可能只是 NetworkOperationNotallowedInUiThread。
-
@RohitMalish :在 Android 中,
Service与所有其他应用程序组件共享主线程(也称为 UI 线程)。您需要在Service中创建一个工作线程,或者使用IntentService在单独的线程上处理其所有工作。 -
@GabrielCoutinhoBrêtasNetto :我认为你应该得到赞扬,因为它暗示它可能是主线程异常上的网络。作为答案发布,并随时在我的评论中解释
Service共享主线程。
标签: android url bufferedreader