所以我在java和android中有完全相同的代码,但由于某种原因在android方法get()
总是无法完成工作并返回false,但在标准java中它完美无缺。我在清单中有互联网许可。
以下是代码:
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();
}
}
}
答案 0 :(得分:2)
在Android中启动服务时,它仍然在主线程中运行,也就是说, UIThread ,作为一种好的做法,你不应该在那里进行任何密集处理线程,因为它将锁定用户与您的应用程序的交互。因此,即使在服务中,您也必须创建自己的线程来访问网络资源 以下是Services
的参考链接