2016-06-30 28 views
-1

我正在使用boilerpipe-android庫我從https://github.com/BartoszJarocki/boilerpipe-android下載 它在我處於調試模式時非常有效,但是當我編譯發佈版本時出現錯誤。Android Boilepipe - java.lang.RuntimeException

這是錯誤

java.lang.RuntimeException: An error occurred while executing doInBackground() 
      at android.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 android.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 android.os.AsyncTask$2.call(AsyncTask.java:295) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
      at android.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 android.os.AsyncTask$2.call(AsyncTask.java:295) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
      at android.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()); 
+0

任何downvoting,關心給出的原因嗎?我的問題出了什麼問題? – user3564573

+0

他們因爲問題投票是與圖書館幫助有關。 – karan

+0

@karan是一個圖書館不會使問題無效。我也試着在github上提問。人們一直在這裏問谷歌/臉譜API的問題,這一點也不例外。 – user3564573

回答

0

這可能是因爲這是由於庫類的類會被混淆/在發佈版本上使用proguard進行縮小。由於類名已更改,因此反射字符串不再與類名相匹配並導致崩潰。

爲了獲得更多的線索,你可以添加到您的項目的proguard的文件

-keepattributes SourceFile,LineNumberTable 

這至少應該讓你的文件名和線路中的堆棧跟蹤,而不是來源不明,這可能會給你更多線索。

可能加入這一行到您的項目proguard的文件將解決的事情:

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

謝謝!它終於奏效了,我試着只保留所有與這個文件相關的類,起初我的語法錯了,我想這個工作是「保留類de.l3s。** -keep class org.cyberneko。* * -keep class org.apache.xerces。**「 – user3564573

相關問題