我遇到了一个奇怪的问题,试图在我的Android应用程序中用颜色显示我的logcat数据。
我在应用程序中显示的数据是:
private class LoadLogCatData extends AsyncTask<Void, String, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
Process process = Runtime.getRuntime().exec("logcat -d");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
log = new StringBuilder();
String line = "";
int count = 0;
while ((line = bufferedReader.readLine()) != null) {
String lineType = line.substring(0, 1);
String insertLine = "";
if (lineType.equals("E")) {
insertLine = "<font color=#ff0000>" + line + "</font>";
} else if (lineType.equals("W")) {
insertLine = "<font color=#ffa500>" + line + "</font>";
} else if (lineType.equals("D")) {
insertLine = "<font color=#000080>" + line + "</font>";
} else if (lineType.equals("I")) {
insertLine = "<font color=#006400>" + line + "</font>";
} else {
insertLine = "<font color=#000000>" + line + "</font>";
}
if (count == 0) {
log.append("<b>" + insertLine + "</b><br>");
} else {
log.append(count + ": " + insertLine + "<br>");
}
count++;
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void v) {
logArea.setText(Html.fromHtml(log.toString()));
progressRing.setVisibility(View.INVISIBLE);
}
}
出于某种原因,数据以正确的颜色显示,直到line logcat 738
。之后,一切都呈深蓝色。
我首先想到的是,它可能将其余数据读作单个字符串,因此无法识别它是什么类型的行。 但事实并非如此,因为“count”(行号)仍然正确打印出来,这意味着每一行都被处理掉了,但由于某种原因,它被赋予了蓝色。
我试图“syso”出每行,这给了我所有正确的颜色..打印出这样的东西:
D: BLUE
D: BLUE
W: ORANGE
I: GREEN
... And so on
我希望有人能看出问题所在。 提前谢谢。