我想从网页上获取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)));
}
答案 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