0

所以我在 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();
            }
        }
    }
4

1 回答 1

2

在 Android 中,当您启动一项服务时,它仍会在Main Thread(又名UIThread )中运行,作为一种好的做法,您不应在该线程中进行任何密集处理,因为它会锁定用户与您的应用程序的交互。因此,即使在服务中,您也必须创建自己的线程来访问网络资源。
这是服务的参考链接

于 2012-11-02T23:55:44.650 回答