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 楼答案
这很可能是由于库类使用反射,并且在发布版本中使用proguard对类名进行了模糊/缩小。由于类名已更改,反射字符串与类名不再匹配,从而导致崩溃
要获得更多线索,可以将其添加到项目的proguard文件中
这至少可以得到堆栈跟踪中的文件名和行,而不是未知源,这可能会为您提供更多线索
也许将这一行添加到您的project proguard文件将解决以下问题: