如何使用大HTML字符串?

时间:2017-03-07 17:44:21

标签: java android html

我想从网页上获取HTML,从代码中删除一些标签并使用TextView显示它......但是这些HTML太大了,不能临时存储到字符串中......

当我尝试这种方式时:

String html = "myBigHTML";
myTextView.setText(fromHtml(html));

编译器说error: constant string too long

如果我将html放入.txt并尝试这样:

InputStream is = getAssets().open("html.txt");

tvTeste.setText(fromHtml(convertStreamToString(is)));

public static String convertStreamToString(InputStream is) throws Exception {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
        sb.append(line).append("\n");
    }
    reader.close();
    return sb.toString();
}

它可以工作但应用程序变得太慢,几乎冻结......而且,如果我将它存储在.txt中,我无法使用标签......

。::编辑::。

我问的onCreate()方法......

private TextView tvTeste;
private InputStream is;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_frequencia);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

    tvTeste = (TextView)findViewById(R.id.tvTeste);

    try {
        is = getAssets().open("html.txt");
    } catch (IOException e) {
        e.printStackTrace();
    }

    BufferedReader br = new BufferedReader(new InputStreamReader(is));

    String strLine;

    List<String> stringList = new ArrayList<>();
    try {
        while ((strLine = br.readLine()) != null)   {
            stringList.add(strLine);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    tvTeste.setText(fromHtml(TextUtils.join("",stringList)));
}

2 个答案:

答案 0 :(得分:0)

让我们试试这个:HTML文本的每一行都是一个字符串。每个String都在String的List中。
所以,一些伪代码

List<String> stringList = new ArrayList<>();

while (htmlHandler.next()) {
   stringList.add(fromHtml(htmlHandler.readLine()));
}

myTextView.setText(joinStringArray(stringList));

joinStringArray使用StringBuilder生成单个大字符串对象 基本上你不应该阅读整个网页,但是你应该按顺序阅读它。

答案 1 :(得分:0)

另一点要标记。您应该避免任何耗时的过程阻止活动。尝试使用相同的,例如AsyncTask。 请检查https://developer.android.com/reference/android/os/AsyncTask.html