类型不匹配:无法从 StringBuilder 转换为 String

2023-12-22

此方法返回给定 URL 的源。

private static String getUrlSource(String url) {
    try {
        URL localUrl = null;
        localUrl = new URL(url);
        URLConnection conn = localUrl.openConnection();
        BufferedReader reader = new BufferedReader(
            new InputStreamReader(conn.getInputStream()));
        String line = "";
        String html;
        StringBuilder ma = new StringBuilder();
        while ((line = reader.readLine()) != null) {
            ma.append(line);
        }
        return ma;
    } catch (Exception e) {
        Log.e("ERR",e.getMessage());
    }
}

它给了我这个错误:

Type mismatch: cannot convert from StringBuilder to String

还有两个选择:

  1. Change the return type to StringBuilder.但我希望它返回一个字符串。
  2. Change type of ma to String.更改字符串后没有append()方法。

Just use

return ma.toString();

代替

return ma;

ma.toString()返回 StringBuilder 的字符串表示形式。

See StringBuilder#toString() http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/StringBuilder.html#toString()欲了解详情

正如 Valeri Atamaniouk 在评论中建议的那样,您还应该在catch块,否则你会得到一个编译器错误missing return statement,所以编辑

} catch (Exception e) {
    Log.e("ERR",e.getMessage());
}

to

} catch (Exception e) {
    Log.e("ERR",e.getMessage());
    return null; //or maybe return another string
}

将是一个好主意。


EDIT

正如 Esailija 所建议的,我们在这段代码中有三个反模式

} catch (Exception e) {           //You should catch the specific exception
    Log.e("ERR",e.getMessage());  //Don't log the exception, throw it and let the caller handle it
    return null;                  //Don't return null if it is unnecessary
}

所以我认为最好做这样的事情:

private static String getUrlSource(String url) throws MalformedURLException, IOException {
    URL localUrl = null;
    localUrl = new URL(url);
    URLConnection conn = localUrl.openConnection();
    BufferedReader reader = new BufferedReader(
            new InputStreamReader(conn.getInputStream()));
    String line = "";
    String html;
    StringBuilder ma = new StringBuilder();
    while ((line = reader.readLine()) != null) {
        ma.append(line);
    }
    return ma.toString();
}

然后,当你调用它时:

try {
    String urlSource = getUrlSource("http://www.google.com");
    //process your url source
} catch (MalformedURLException ex) {
    //your url is wrong, do some stuff here
} catch (IOException ex) {
    //I/O operations were interrupted, do some stuff here
}

检查以下链接以获取有关 Java 反模式的更多详细信息:

  • Java 反模式 http://www.odi.ch/prog/design/newbies.php
  • 编程反模式 http://www.javacodegeeks.com/2011/10/programming-antipatterns.html
  • Java 应用程序中的反模式简介 http://www.devx.com/Java/Article/29162
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型不匹配:无法从 StringBuilder 转换为 String 的相关文章

随机推荐

  • 我不知道我错过了什么(乌龟)

    我在用着Trinket运行我的python 我已经修改它好几天了 它一直给我这个错误 Traceback most recent call last File tmp sessions 5ecd67058b43cfc0 main py li
  • iframe 标签内的 html 的用途是什么?

    我在某处读过一次 它是后备内容 但当 src 加载失败时它不会显示 p text p In the 当前规格 https html spec whatwg org multipage iframe embed object html the
  • vb.net datagridview 的问题

    您好 下面的代码在单击特定单元格时打开领导者的详细视图 我试图做到这一点 以便当单击一个单元格时 它会将具有所选单元格的 LeaderID 的任何事件的行位置添加到数组 le 中 然而这行代码 If dgdEvents Rows n Cel
  • 超出表达式递归级别

    不知道为什么下面的例子会出现错误 a 1 a gt 0 echo y echo n y a x a gt 0 echo y echo n n a a a gt 0 echo y echo n bash a expression recurs
  • 使用 Maven 在 Tomcat 中动态运行 WAR,如何添加类路径条目以便只有 Tomcat 可以看到它们?

    场景是这样的 我有一个 web 应用程序 我想使用 tomcat maven plugin 动态运行tomcat 运行目标 http mojo codehaus org tomcat maven plugin run mojo html 问
  • 如果应用程序处于 GC 中,如何可靠地获取 JVM 核心转储?

    我正在尝试查找 java 应用程序中内存泄漏的原因 我需要为某个进程获取堆转储longGC 循环 Jmap 在这种情况下不起作用 因为应用程序被挂起 而且堆非常大 不幸的是 jmap 在我获取的核心转储上抛出 UnknownOopExcep
  • xhgui不保存任何数据

    我已经在 Ubuntu 计算机上安装了所有先决条件 并将以下内容添加到我的 apache 虚拟主机文件中 php admin value auto prepend file var www xhgui external header php
  • 使用 Doxygen 的 Qt 风格文档? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如何使用 Doxygen 生成 Qt 风格的文档 Trolltech 的 C Qt 或 Riverba
  • trigger.io - 无法再创建 ipa 文件

    我通常使用trigger io 生成适用于iOS 的ipa 文件 现在 当我想生成文件时 我收到以下错误消息 运行 usr bin codesign 时失败 codesign allocate 对象 Users mherceg Deskto
  • 使用 vb.net 或 c# 的 Textbox_KeyPress 事件

    我的要求是我正在尝试为我的母语开发一个文本编辑器 也就是说 我正在尝试使用 unicode 字符开发泰米尔语文本编辑器 当我按下键盘上的按键 例如英文字符 k时 我想替换两个字符 例如 H0b95 H0bcd 我如何实施这个概念 是否可能
  • 在 MySQL 中搜索表情符号

    我有一个看起来像这样的字符串 现在 当我的应用程序将此字符串推入其 utf8 mysql 数据库列时 它在 MySQL CLI 中看起来像这样 如果我选择convert mystring using utfmb4 它看起来仍然是这个样子 如
  • 如何惯用地打破嵌套并行 (OpenMP) Fortran 循环?

    这是顺序代码 do i 1 n do j i 1 n if some condition i j then result here s result return end if end do end do 除了以下之外 是否有更清晰的方法来
  • /usr/bin/ld:错误:找不到-lboost_unit_test_framework

    这个标题提出了很多问题 但我发现没有适合我的答案 我有以下代码 define BOOST TEST DYN LINK define BOOST TEST MODULE Hello include
  • 如何在 Intellij IDEA 中关闭注释的错误验证?

    我有一个使用 Eclipse 的开发人员 它会在我们的 JUnit 测试中自动在各个位置插入注释 但是 当我在IDEA中打开测试时 注释带有红色下划线 并且注释上写着 实现接口方法时不允许 Override 我不太关心注释 因此 它不允许我
  • 我是否正确使用了 IRepository?

    我希望在一个小项目中使用 IRepository 模式 如果重要的话 由 NHibernate 支持 该域是一个简单的域 故意这样让我能够专注于理解 IRepository 模式 唯一的域类是Movie 其属性为Year Genre and
  • Haskell id 函数的用途

    有哪些用途id函数 http www zvon org other haskell Outputprelude id f html在哈斯克尔 作为一个论据很有用高阶函数 http www haskell org haskellwiki Hi
  • WinRT / Win8 中的 HttpClient 缺少响应标头

    我在 Windows 8 应用程序中使用 HttpClient 它似乎故意在响应中隐藏自定义标头 例如 我们收到的响应有一个名为的自定义标头 示例标题 123 我期望响应内容中的标头将包含值为 123 的 Sample Header var
  • oracle中使用sql的动态列

    我有以下表格示例 Thera可以是无限的分支机构和客户 我需要对这些分支机构进行分组并计算其客户数量 然后用不同的列显示它 BRANCHNAME CUSTOMERNO 100 1001010 100 1001011 103 1001012
  • 如何在 Laravel Blade 中拆分 foreach 循环

    在 Blade 中使用雄辩搜索时 有没有办法分割它的结果 我问 因为我有一个引导轮播 它是 2 张幻灯片 每张幻灯片分为 3 列 我希望每张幻灯片都填写以下搜索的结果 alsoBought Game where category id sh
  • 类型不匹配:无法从 StringBuilder 转换为 String

    此方法返回给定 URL 的源 private static String getUrlSource String url try URL localUrl null localUrl new URL url URLConnection co