我尝试了多种方法在android中渲染html。但它们都不符合我的要求。
作为对服务的回应,我在字符串中得到了html消息。
<table id='tblUpdateHistory' cellpadding='0' cellspacing='0'><tr align='left' valign='top'><td align='left' colspan='3' valign='top'><b>Case Update History<b></td></tr><tr align='left' valign='top'><td class='istColumn' align='left'><b>&nbsp;</b></td><td class='secondColumn' align='left' valign='top'><b>Old Value</b></td><td class='thirdColumn' align='left' valign='top'><b>Updated Value</b></td></tr><tr align='left'><td class='istColumn' align='left' valign='top'>Phone</td><td class='secondColumn' align='left' valign='top'>2034947144</td><td class='thirdColumn' align='left' valign='top'>203-494-7144</td></tr></table>",
我正在使用给定的方法在textView中呈现html。
public static void setHtml(TextView textView, String bodyData) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
textView.setText(Html.fromHtml(bodyData, Html.FROM_HTML_MODE_LEGACY));
} else {
textView.setText(Html.fromHtml(bodyData));
}
}
我还尝试了三种方法来处理消息中的所有EscapeCharacter并正确替换它们
public String handleEscapeCharacter( String str ) {
String[] escapeCharacters = { ">", "<", "&", """, "'" ," "};
String[] onReadableCharacter = {">", "<", "&", "\"\"", "'" , "\\u00A0"};
for (int i = 0; i < escapeCharacters.length; i++) {
str = str.replace(escapeCharacters[i], onReadableCharacter[i]);
} return str;
}
然后我尝试了以下方式
public String convertToHtml(String htmlString) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("<![CDATA[");
stringBuilder.append(htmlString);
stringBuilder.append("]]>");
return stringBuilder.toString();
}
第三,我尝试替换
setHtml(tvDetailText, descriptionTemp.replaceAll("(\n|\n\r|\r)", "<br />"));
但是当我打开Notepad ++并替换所有转义字符并通过替换某些字符来格式化我的消息。然后我尝试手动它工作,但只缺少一个选项卡。我在哪里做错了。格式化的html写在下面。
<table
id='tblUpdateHistory'
cellpadding='0'
cellspacing='0' >
<tr align='left'
valign='top' >
<td align='left' colspan='3' valign='top'><b>Case Update History<b> </td>
</tr>
<tr align='left'
valign='top' >
<td class='istColumn' align='left'><b>&nbsp;</b></td>
<td class='secondColumn' align='left' valign='top'><b>Old Value</b></td>
<td class='thirdColumn' align='left' valign='top'><b>Updated Value</b></td>
</tr>
<tr align='left'>
<td class='istColumn' align='left' valign='top'>Phone</td>
<td class='secondColumn' align='left' valign='top'>2034947144</td>
<td class='thirdColumn' align='left' valign='top'>203-494-7144</td>
</tr>
</table>
我已经解析了这个json响应。
{
"CaseNote": [{
"ID": 575772,
"CaseID": 218320,
"Date": "6/15/2014 3:10:49 PM",
"Message": "Refunded: Order was never imported/charged due to web issue. This customer did not want to pickup a different arrangement.",
"Status": 6,
"ReOpened": "False",
"UserName": "",
"Source": "EAConnect",
"OriginalRequest": "False"
}, {
"ID": 575732,
"CaseID": 218320,
"Date": "6/15/2014 3:04:12 PM",
"Message": "<table id='tblUpdateHistory' cellpadding='0' cellspacing='0'><tr align='left' valign='top'><td align='left' colspan='3' valign='top'><b>Case Update History<b></td></tr><tr align='left' valign='top'><td class='istColumn' align='left'><b>&nbsp;</b></td><td class='secondColumn' align='left' valign='top'><b>Old Value</b></td><td class='thirdColumn' align='left' valign='top'><b>Updated Value</b></td></tr><tr align='left'><td class='istColumn' align='left' valign='top'>Phone</td><td class='secondColumn' align='left' valign='top'>2034947144</td><td class='thirdColumn' align='left' valign='top'>203-494-7144</td></tr></table>",
"Status": 2,
"ReOpened": "False",
"UserName": "Jill Bailey",
"Source": "CallCenter",
"OriginalRequest": "False"
}
]
}
CaseNotes 中的第二个消息字段,在IOS结束时,它正常工作。
如何将此邮件转换为 HTML格式 ??
编辑1
我的HTML response
编码不正确我在codepen上测试了它。并尝试使用给定的两种方法对其进行编码,但都是徒劳的..
String firstEncoding = TextUtils.htmlEncode(itemList.get(position).getMessage());
String secondEncoding = Html.escapeHtml(itemList.get(position).getMessage());