2016-08-03 3 views
0
SentenceModel model = null; 
    InputStream modelIn = null; 

    AssetManager assManager = context.getAssets(); 

    try { 
     modelIn = assManager.open("en-sent.bin"); 
     model = new SentenceModel(modelIn); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (modelIn != null) { 
      try { 
       modelIn.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    //initializes sentence detector 
    SentenceDetectorME sentenceDetector = new SentenceDetectorME(model); 

//Stacktrace 
08-03 14:25:23.842 27210-27210/com.gigstudios.newssummary W/System.err: java.io.FileNotFoundException: en-sent.bin 
08-03 14:25:23.842 27210-27210/com.gigstudios.newssummary W/System.err:  at android.content.res.AssetManager.openAsset(Native Method) 
08-03 14:25:23.842 27210-27210/com.gigstudios.newssummary W/System.err:  at android.content.res.AssetManager.open(AssetManager.java:313) 
08-03 14:25:23.842 27210-27210/com.gigstudios.newssummary W/System.err:  at android.content.res.AssetManager.open(AssetManager.java:287) 
08-03 14:25:23.842 27210-27210/com.gigstudios.newssummary W/System.err:  at com.gigstudios.newssummary.WordCounter.makeSentences(WordCounter.java:35) 
08-03 14:25:23.842 27210-27210/com.gigstudios.newssummary W/System.err:  at com.gigstudios.newssummary.Article.<init>(Article.java:19) 
08-03 14:25:23.842 27210-27210/com.gigstudios.newssummary W/System.err:  at com.gigstudios.newssummary.ArticleReceiver.receiveNewsArticles(ArticleReceiver.java:87) 
08-03 14:25:23.842 27210-27210/com.gigstudios.newssummary W/System.err:  at com.gigstudios.newssummary.ArticleReceiver.<init>(ArticleReceiver.java:37) 
08-03 14:25:23.842 27210-27210/com.gigstudios.newssummary W/System.err:  at com.gigstudios.newssummary.MainActivity.fetchNews(MainActivity.java:114) 
08-03 14:25:23.842 27210-27210/com.gigstudios.newssummary W/System.err:  at com.gigstudios.newssummary.MainActivity$1.run(MainActivity.java:52) 
08-03 14:25:23.843 27210-27210/com.gigstudios.newssummary W/System.err:  at android.os.Handler.handleCallback(Handler.java:746) 
08-03 14:25:23.843 27210-27210/com.gigstudios.newssummary W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
08-03 14:25:23.843 27210-27210/com.gigstudios.newssummary W/System.err:  at android.os.Looper.loop(Looper.java:148) 
08-03 14:25:23.843 27210-27210/com.gigstudios.newssummary W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5443) 
08-03 14:25:23.843 27210-27210/com.gigstudios.newssummary W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
08-03 14:25:23.843 27210-27210/com.gigstudios.newssummary W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
08-03 14:25:23.843 27210-27210/com.gigstudios.newssummary W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
08-03 14:25:23.843 27210-27210/com.gigstudios.newssummary D/AndroidRuntime: Shutting down VM 
08-03 14:25:23.844 27210-27210/com.gigstudios.newssummary E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.gigstudios.newssummary, PID: 27210 
                      java.lang.NullPointerException: Attempt to invoke virtual method 'opennlp.tools.sentdetect.SentenceDetectorFactory opennlp.tools.sentdetect.SentenceModel.getFactory()' on a null object reference 
                       at opennlp.tools.sentdetect.SentenceDetectorME.<init>(SentenceDetectorME.java:86) 
                       at com.gigstudios.newssummary.WordCounter.makeSentences(WordCounter.java:50) 
                       at com.gigstudios.newssummary.Article.<init>(Article.java:19) 
                       at com.gigstudios.newssummary.ArticleReceiver.receiveNewsArticles(ArticleReceiver.java:87) 
                       at com.gigstudios.newssummary.ArticleReceiver.<init>(ArticleReceiver.java:37) 
                       at com.gigstudios.newssummary.MainActivity.fetchNews(MainActivity.java:114) 
                       at com.gigstudios.newssummary.MainActivity$1.run(MainActivity.java:52) 
                       at android.os.Handler.handleCallback(Handler.java:746) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:148) 
                       at android.app.ActivityThread.main(ActivityThread.java:5443) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

나는 몇 시간 동안이 문제를 해결하려고 노력했지만 아무데도 보지 못했습니다. 위의 코드 샘플 모델에서는 항상 null이고 en-sent.bin 파일은 modelIn 객체로 읽히지 않는 것 같습니다. 내 bin 파일은 현재 assets 폴더에 있습니다. 어떤 도움이라도 대단히 감사합니다.InputStream 항상 nullpointerexception을 반환합니다.

+0

질문을 편집하고 예외와 관련된 Java 스택 추적을 게시하십시오. – CommonsWare

+0

질문에 stacktrace를 추가하십시오. – Julian

+0

@Julian 스택 추적을 추가했습니다. – Jared

답변

-1

을 수행해야합니다

BufferedReader reader = null; 
StringBuilder sbuilder = new StringBuilder(); 
    try { 
     reader = new BufferedReader(
      new InputStreamReader(getAssets().open("en-sent.bin"))); 

     // read 
     String mLine; 
     while ((mLine = buffer.readLine()) != null) { 
        sbuilder.append(mLine); 
     } 
    } catch (IOException e) { 
//log 
    } finally { 
     if (reader != null) { 
      try { 
       reader.close(); 
      } catch (IOException e) { 
//log 
      } 
     } 
    } 
+0

이 작업을 수행해야하는 이유와 현재 코드에서보고있는 예외와의 관계에 대해 설명하십시오. –

+0

@ Jason "sbuilder"및 "buffer"란 무엇입니까? 이 코드를 구현하는 방법을 모르겠습니다. – Jared

+0

예제처럼 InputStream에 에셋 파일을 열려면 코드를 편집했습니다. InputStream modelIn = null; AssetManager assManager = context.getAssets(); modelIn = assManager.open ("en-sent.bin"); InputStreamReader 으로 읽어야합니다. sbuilder에서 파일의 모든 데이터를 문자열로 볼 수 있으므로 문자열을 읽을 수 있습니다. – Jason

0

나는 쉬운 해결책을 발견!

 modelIn = assManager.open("en-sent.bin"); 
     model = new SentenceModel(modelIn); 

사용 : 내가하는 대신 ...

을 "원시"디렉토리의 bin 파일을 넣어

 modelIn = context.getResources().openRawResource(R.raw.en_sent); 
     model = new SentenceModel(modelIn); 

작품을 완벽하게!

관련 문제