【问题标题】:Read contents of a URL in Android在 Android 中读取 URL 的内容
【发布时间】:2010-01-16 01:25:54
【问题描述】:

我是 android 新手,我正在尝试弄清楚如何将 URL 的内容作为字符串获取。例如,如果我的 URL 是 http://www.google.com/,我想将页面的 HTML 作为字符串获取。谁能帮我解决这个问题?

【问题讨论】:

    标签: android


    【解决方案1】:

    来自 Java 文档:readingURL

    URL yahoo = new URL("http://www.yahoo.com/");
    BufferedReader in = new BufferedReader(
                new InputStreamReader(
                yahoo.openStream()));
    
    String inputLine;
    
    while ((inputLine = in.readLine()) != null)
        System.out.println(inputLine);
    
    in.close();
    

    不要将每一行写入System.out,只需将其附加到一个字符串即可。

    【讨论】:

    • 谢谢,我之前试过了,我才意识到我的问题:我忘了给它互联网权限......
    • 如果您发布的代码示例似乎在做正确的事情,它会让其他人有机会找出可能导致问题的其他原因(例如您的权限问题)。
    • 你能一次把它全部放在一个字符串中,还是必须逐行追加?
    • 代码应该在 AsyncTask 或任何后台线程中。
    【解决方案2】:

    您可以打开一个流并读取每一行并将其附加到一个字符串 - 记得用 try-catch 块包装所有内容 - 希望对您有所帮助!

    String fullString = "";
    URL url = new URL("http://example.com");
    BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
    String line;
    while ((line = reader.readLine()) != null) {
        fullString += line;
    }
    reader.close();
    

    【讨论】:

    • 如何编写 try-catch 块?我很新,Java 告诉我要处理异常。另外:fullString 是输出,不是吗?
    • @SamanMiran try-catch 在 java 中用于执行可能引发异常的操作并捕获该异常。 try {// 做一些有风险的事情 } catch (Exception 异常) {// 处理它}
    • @SamanMiran yes - fullString 是输出;您可以看到它以空字符串 ("") 开始,并且在 while 块的每个循环中 - 最后都添加了另一行
    • 这样使用 String 是非常糟糕的:你在循环的每一步都分配一个新的 String 对象。改用 StringBuilder 并附加到它。使用 StringBuilder.toString() 获取结果字符串。
    【解决方案3】:

    你可以像这样把它放在一个 AsyncTask 中:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    
        try {
            new Main2Activity.MyTask().execute(this);
    
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private static class MyTask extends AsyncTask<Object, Void, String> {
    
        Main2Activity activity;
    
        @Override
        protected String doInBackground(Object... params) {
            activity = (Main2Activity)params[0];
            try {
                StringBuilder sb = new StringBuilder();
                URL url = new URL("http://www.google.com/");
    
                BufferedReader in;
                in = new BufferedReader(
                        new InputStreamReader(
                                url.openStream()));
    
                String inputLine;
                while ((inputLine = in.readLine()) != null)
                    sb.append(inputLine);
    
                in.close();
    
                return sb.toString();
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return null;
        }
    
        @Override
        protected void onPostExecute(String str) {
            //Do something with result string
            WebView webView = activity.findViewById(R.id.web_view);
            webView.loadData(str, "text/html; charset=UTF-8", null);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-25
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      相关资源
      最近更新 更多