使用Java Prettify突出显示Android应用程序语法

使用Java Prettify突出显示Android应用程序语法,java,android,syntax,highlighting,prettify,Java,Android,Syntax,Highlighting,Prettify,我需要将语法突出显示集成到我的Android应用程序中。我尝试使用Java Prettify(),但未能将其集成。应用程序正在崩溃。由于我的avd不工作,所以我无法从logcat获得有关坠机的信息 我关注以下信息: 我的代码到现在为止: import java.util.HashMap; import java.util.List; import java.util.Map; import prettify.PrettifyParser; import syntaxhighlight.Pars

我需要将语法突出显示集成到我的Android应用程序中。我尝试使用Java Prettify(),但未能将其集成。应用程序正在崩溃。由于我的avd不工作,所以我无法从logcat获得有关坠机的信息

我关注以下信息:

我的代码到现在为止:

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import prettify.PrettifyParser;
import syntaxhighlight.ParseResult;
import syntaxhighlight.Parser;

public class PrettifyHighlighter {
Map<String, String> COLORS = buildColorsMap();
String FONT_PATTERN = "<font color=\"#%s\">%s</font>";
Parser parser = new PrettifyParser();

public String highlight(String fileExtension, String sourceCode) {
    StringBuilder highlighted = new StringBuilder();
    List<ParseResult> results = parser.parse(fileExtension, sourceCode);
    for(ParseResult result : results){
        String type = result.getStyleKeys().get(0);
        String content = sourceCode.substring(result.getOffset(), result.getOffset() + result.getLength());
        highlighted.append(String.format(FONT_PATTERN, getColor(type), content));
    }
    return highlighted.toString();
}

private String getColor(String type){
    return COLORS.containsKey(type) ? COLORS.get(type) : COLORS.get("pln");
}

private static Map<String, String> buildColorsMap() {
    Map<String, String> map = new HashMap<String, String>();
    map.put("typ", "87cefa");
    map.put("kwd", "00ff00");
    map.put("lit", "ffff00");
    map.put("com", "999999");
    map.put("str", "ff4500");
    map.put("pun", "eeeeee");
    map.put("pln", "ffffff");
    return map;
}
import java.util.HashMap;
导入java.util.List;
导入java.util.Map;
进口粉饰剂;
导入syntaxhighlight.ParseResult;
导入syntaxhighlight.Parser;
公共级装饰灯{
映射颜色=buildColorsMap();
字符串FONT_PATTERN=“%s”;
Parser=new PrettifyParser();
公共字符串突出显示(字符串文件扩展名、字符串源代码){
突出显示的StringBuilder=新StringBuilder();
List results=parser.parse(文件扩展名,源代码);
for(ParseResult:results){
字符串类型=result.getStyleKeys().get(0);
字符串内容=sourceCode.substring(result.getOffset(),result.getOffset()+result.getLength());
突出显示的.append(String.format(FONT_模式、getColor(类型)、content));
}
返回高亮显示的.toString();
}
私有字符串getColor(字符串类型){
返回颜色.containsKey(类型)?COLORS.get(类型):COLORS.get(“pln”);
}
私有静态映射buildColorsMap(){
Map Map=newhashmap();
map.put(“典型”、“87cefa”);
地图放置(“kwd”、“00ff00”);
地图放置(“点亮”、“ffff00”);
map.put(“com”、“999999”);
地图放置(“str”、“ff4500”);
地图放置(“双关语”、“eeeeee”);
地图出售(“pln”、“ffffff”);
返回图;
}
}

调试时,我发现当我对该行进行注释时: Parser=new PrettifyParser()

它的相关线路,并没有应用程序崩溃。 我在谷歌上搜索了一下,但没有找到解决方案

我的日志:

03-02 07:57:12.300: E/AndroidRuntime(1245): FATAL EXCEPTION: main
03-02 07:57:12.300: E/AndroidRuntime(1245): Process: com.himanshujaju.codeit, PID: 1245
03-02 07:57:12.300: E/AndroidRuntime(1245): java.lang.NoClassDefFoundError: prettify.PrettifyParser
03-02 07:57:12.300: E/AndroidRuntime(1245):     at com.himanshujaju.codeit.PrettifyHighlighter.<init>(PrettifyHighlighter.java:14)
03-02 07:57:12.300: E/AndroidRuntime(1245):     at com.himanshujaju.codeit.codeArea$Run.onPostExecute(codeArea.java:193)
03-02 07:57:12.300: E/AndroidRuntime(1245):     at com.himanshujaju.codeit.codeArea$Run.onPostExecute(codeArea.java:1)
03-02 07:57:12.300: E/AndroidRuntime(1245):     at android.os.AsyncTask.finish(AsyncTask.java:632)
03-02 07:57:12.300: E/AndroidRuntime(1245):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
03-02 07:57:12.300: E/AndroidRuntime(1245):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
03-02 07:57:12.300: E/AndroidRuntime(1245):     at android.os.Handler.dispatchMessage(Handler.java:102)
03-02 07:57:12.300: E/AndroidRuntime(1245):     at android.os.Looper.loop(Looper.java:137)
03-02 07:57:12.300: E/AndroidRuntime(1245):     at android.app.ActivityThread.main(ActivityThread.java:4998)
03-02 07:57:12.300: E/AndroidRuntime(1245):     at java.lang.reflect.Method.invokeNative(Native Method)
03-02 07:57:12.300: E/AndroidRuntime(1245):     at java.lang.reflect.Method.invoke(Method.java:515)
03-02 07:57:12.300: E/AndroidRuntime(1245):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
03-02 07:57:12.300: E/AndroidRuntime(1245):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
03-02 07:57:12.300: E/AndroidRuntime(1245):     at dalvik.system.NativeStart.main(Native Method)
03-02 07:57:12.300:E/AndroidRuntime(1245):致命异常:主
03-02 07:57:12.300:E/AndroidRuntime(1245):进程:com.himanshujaju.codeit,PID:1245
03-02 07:57:12.300:E/AndroidRuntime(1245):java.lang.NoClassDefFoundError:prettify.PrettifyParser
03-02 07:57:12.300:E/AndroidRuntime(1245):位于com.himanshujaju.codeit.PrettifyHighlighter.(PrettifyHighlighter.java:14)
03-02 07:57:12.300:E/AndroidRuntime(1245):位于com.himanshujaju.codeit.codeArea$Run.onPostExecute(codea.java:193)
03-02 07:57:12.300:E/AndroidRuntime(1245):位于com.himanshujaju.codeit.codeArea$Run.onPostExecute(codea.java:1)
03-02 07:57:12.300:E/AndroidRuntime(1245):在android.os.AsyncTask.finish(AsyncTask.java:632)
03-02 07:57:12.300:E/AndroidRuntime(1245):在android.os.AsyncTask.access$600(AsyncTask.java:177)
03-02 07:57:12.300:E/AndroidRuntime(1245):位于android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
03-02 07:57:12.300:E/AndroidRuntime(1245):在android.os.Handler.dispatchMessage(Handler.java:102)上
03-02 07:57:12.300:E/AndroidRuntime(1245):在android.os.Looper.loop(Looper.java:137)
03-02 07:57:12.300:E/AndroidRuntime(1245):位于android.app.ActivityThread.main(ActivityThread.java:4998)
03-02 07:57:12.300:E/AndroidRuntime(1245):位于java.lang.reflect.Method.Invokenactive(本机方法)
03-02 07:57:12.300:E/AndroidRuntime(1245):位于java.lang.reflect.Method.invoke(Method.java:515)
03-02 07:57:12.300:E/AndroidRuntime(1245):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
03-02 07:57:12.300:E/AndroidRuntime(1245):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
03-02 07:57:12.300:E/AndroidRuntime(1245):在dalvik.system.NativeStart.main(本机方法)

我试过你的代码,效果很好

  PrettifyHighlighter highlighter = new PrettifyHighlighter();
  String code = "for (int i = 0; i < 5; i++){System.out.println(i);}";
  String highlighted = highlighter.highlight("java", code);
  textView1.setText(Html.fromHtml(highlighted));
PrettifyHighlighter highlighter=新的PrettifyHighlighter();
String code=“for(inti=0;i<5;i++){System.out.println(i);}”;
突出显示的字符串=highlighter.highlight(“java”,代码);
textView1.setText(Html.fromHtml(突出显示));
这是emulator上的输出文本视图


对于
NoClassDefFoundError
异常,看起来eclipse在构建时没有导出jar库。试试。

这是一个java库,有些类在android上不存在(例如:swing.*)。你可以试试。。。这就是我看到这种突出显示方法的地方。请发布您的
logcat
以查找原因。我在问题中发布了avd未启动的消息。它永远停留在android加载屏幕上。而且它也无法识别我的micromax a116i。avd速度非常慢,您需要等待它启动(使用小屏幕创建avd可能更好)。如果您使用该设备,请确保已安装驱动程序。请谷歌怎么做。没有logcat,我帮不了你。很抱歉,评论这个问题太晚了,但它会给出字符串作为输出。。换言之,它并不打算将代码。。。有没有办法保留压痕