有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android BoilePipeJava。lang.RuntimeException

我正在使用从https://github.com/BartoszJarocki/boilerpipe-安卓下载的boilerpipe 安卓库 当我处于调试模式时,它工作得很好,但当我编译发布版本时,我得到了一个错误

这就是错误所在

 java.lang.RuntimeException: An error occurred while executing doInBackground() 
           at 安卓.os.AsyncTask$3.done(AsyncTask.java:309)
           at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
           at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
           at java.util.concurrent.FutureTask.run(FutureTask.java:242)
           at 安卓.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
           at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.ExceptionInInitializerError
           at org.cyberneko.html.HTMLScanner.scanEntityRef(HTMLScanner.java:1386)
           at org.cyberneko.html.HTMLScanner$ContentScanner.scanAttribute(HTMLScanner.java:2955)
           at org.cyberneko.html.HTMLScanner$ContentScanner.scanAttribute(HTMLScanner.java:2785)
           at org.cyberneko.html.HTMLScanner$ContentScanner.scanStartElement(HTMLScanner.java:2639)
           at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2071)
           at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:891)
           at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:491)
           at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:444)
           at mf.org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:109)
           at mf.org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1199)
           at de.l3s.boilerpipe.sax.BoilerpipeSAXInput.getTextDocument(BoilerpipeSAXInput.java:61)
           at de.l3s.boilerpipe.sax.BoilerpipeSAXInput.getTextDocument(BoilerpipeSAXInput.java:49)
           at de.l3s.boilerpipe.sax.ImageExtractor.process(ImageExtractor.java:109)
           at com.ulicast.Feed.ImageLinkExtractor.doInBackground(ImageLinkExtractor.java:43)
           at com.ulicast.Feed.ImageLinkExtractor.doInBackground(ImageLinkExtractor.java:22)
           at 安卓.os.AsyncTask$2.call(AsyncTask.java:295)
           at java.util.concurrent.FutureTask.run(FutureTask.java:237)
           at 安卓.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
           at java.lang.Thread.run(Thread.java:818) 
  Caused by: java.lang.NullPointerException: in == null
          at java.util.Properties.load(Properties.java:246)
          at org.cyberneko.html.HTMLEntities.load0(HTMLEntities.java:102)
          at org.cyberneko.html.HTMLEntities.(HTMLEntities.java:54)
          at org.cyberneko.html.HTMLScanner.scanEntityRef(HTMLScanner.java:1386) 
          at org.cyberneko.html.HTMLScanner$ContentScanner.scanAttribute(HTMLScanner.java:2955) 
          at org.cyberneko.html.HTMLScanner$ContentScanner.scanAttribute(HTMLScanner.java:2785) 
          at org.cyberneko.html.HTMLScanner$ContentScanner.scanStartElement(HTMLScanner.java:2639) 
          at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2071) 
          at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:891) 
          at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:491) 
          at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:444) 
          at mf.org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:109) 
          at mf.org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1199) 
          at de.l3s.boilerpipe.sax.BoilerpipeSAXInput.getTextDocument(BoilerpipeSAXInput.java:61) 
          at de.l3s.boilerpipe.sax.BoilerpipeSAXInput.getTextDocument(BoilerpipeSAXInput.java:49) 
          at de.l3s.boilerpipe.sax.ImageExtractor.process(ImageExtractor.java:109) 
          at com.ulicast.Feed.ImageLinkExtractor.doInBackground(ImageLinkExtractor.java:43) 
          at com.ulicast.Feed.ImageLinkExtractor.doInBackground(ImageLinkExtractor.java:22) 
          at 安卓.os.AsyncTask$2.call(AsyncTask.java:295) 
          at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
          at 安卓.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
          at java.lang.Thread.run(Thread.java:818)  

这是我用来获取数据的类

public class ImageLinkExtractor extends AsyncTask<String, Void, String> {

private ImageLinkExtractorListener listener;

public ImageLinkExtractor (ImageLinkExtractorListener listener){
    this.listener = listener;
}

@Override
protected void onPostExecute(String s) {
    listener.onExecuteFinish(s);
}

@Override
protected String doInBackground(String... params) {
    String url = params[0];
    String image = null;
    final BoilerpipeExtractor extractor = ArticleExtractor.getInstance();
    final ImageExtractor ie = ImageExtractor.getInstance();

    try {
        List<Image> imgUrls = ie.process(new URL(url), extractor);
        Collections.sort(imgUrls);
        if(!imgUrls.isEmpty()) image = imgUrls.get(0).getSrc();
    } catch (IOException | SAXException | BoilerpipeProcessingException e) {
        e.printStackTrace();
    }

    return image;
}

public interface ImageLinkExtractorListener{
    void onExecuteFinish(String imageUrl);
}

}

在我调用AsyncTask的类中,我这样调用它

new ImageLinkExtractor(new ImageLinkExtractor.ImageLinkExtractorListener() {
                @Override
                public void onExecuteFinish(String imageUrl) {
                    if(imageUrl!=null) {
                        post.setLinkImage(imageUrl);
                        holder.linkLayout.setVisibility(View.VISIBLE);
                        holder.linkImage.setImageUrl(imageUrl, AppController.getInstance().getImageLoader());
                    }
                }
            }).execute(post.getLink());

共 (1) 个答案

  1. # 1 楼答案

    这很可能是由于库类使用反射,并且在发布版本中使用proguard对类名进行了模糊/缩小。由于类名已更改,反射字符串与类名不再匹配,从而导致崩溃

    要获得更多线索,可以将其添加到项目的proguard文件中

    -keepattributes SourceFile,LineNumberTable
    

    这至少可以得到堆栈跟踪中的文件名和行,而不是未知源,这可能会为您提供更多线索

    也许将这一行添加到您的project proguard文件将解决以下问题:

    -keep class org.apache.xerces.parsers.SAXParser