簡體   English   中英

InputStream總是返回nullpointerexception

[英]InputStream Always returns nullpointerexception

    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文件當前在資產文件夾中。 任何幫助是極大的贊賞。

我找到了一個簡單的解決方案! 我將bin文件放在“原始”目錄中,然后...

代替:

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

采用:

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

完美的作品!

你需要:

    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
             }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM