Search code examples
pdfnullpointerexceptionvirtual-functionsandroidpdfviewer

Attempt to invoke virtual method crash in AndroidPdfViewer


Using the AndroidPdfViewer package. My build.gradle code:

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
implementation("com.github.bumptech.glide:glide:4.5.0") {
    exclude group: "com.android.support"
}
implementation "com.android.support:support-fragment:26.1.0"
compile 'com.github.barteksc:android-pdf-viewer:2.8.2'

}

Activity XML file:

    <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.github.barteksc.pdfviewer.PDFView
        android:id="@+id/pdfView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

Activity code:

package eu.myapp.myapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.github.barteksc.pdfviewer.PDFView;

public class activity_fact_sheet extends AppCompatActivity {

    PDFView pdfView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        PDFView pdfView = (PDFView) findViewById(R.id.pdfView);
        pdfView.fromAsset("file2.pdf").load();
    }
}

file2.pdf located in app > src > main > assets

Error on run:

01-18 11:59:25.475 29674-29674/eu.myapp.myapp E/AndroidRuntime: FATAL EXCEPTION: main
                                                                        Process: eu.myapp.myapp, PID: 29674
                                                                        java.lang.RuntimeException: Unable to start activity ComponentInfo{eu.myapp.myapp/eu.myapp.myapp.activity_fact_sheet}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.github.barteksc.pdfviewer.PDFView$Configurator com.github.barteksc.pdfviewer.PDFView.fromAsset(java.lang.String)' on a null object reference
                                                                            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2924)
                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2985)
                                                                            at android.app.ActivityThread.-wrap14(ActivityThread.java)
                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                            at android.os.Looper.loop(Looper.java:154)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:6692)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
                                                                         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.github.barteksc.pdfviewer.PDFView$Configurator com.github.barteksc.pdfviewer.PDFView.fromAsset(java.lang.String)' on a null object reference
                                                                            at eu.myapp.myapp.activity_fact_sheet.onCreate(activity_fact_sheet.java:17)
                                                                            at android.app.Activity.performCreate(Activity.java:6912)
                                                                            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
                                                                            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2877)
                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2985) 
                                                                            at android.app.ActivityThread.-wrap14(ActivityThread.java) 
                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635) 
                                                                            at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                            at android.os.Looper.loop(Looper.java:154) 
                                                                            at android.app.ActivityThread.main(ActivityThread.java:6692) 
                                                                            at java.lang.reflect.Method.invoke(Native Method) 
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) 
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 

Steps taken to resolve it:

added PDFView pdfView; to activity code above @Override and under public class activity_fact_sheet extends AppCompatActivity { Also checked to see if it was an issue with my activity opening method (it wasn't).

It seems the error is thrown on pdfView.fromAsset("file2.pdf").load(); in the activity code. That makes it seem to me that it cannot find file2.pdf in the assets, but I'm probably wrong.

The app crashes when you try to open the activity.

Tried to implement it using this video.


Solution

  • OK, I found another topic on stackexchange (besides the countless ones on nullpointer exceptions - which didn't help me). This has the code that works. Just import

    compile 'com.github.barteksc:android-pdf-viewer:2.8.2'
    
    compile 'org.apache.commons:commons-collections4:4.1'
    

    in your gradle build file.

    Then make sure you have the <uses-permission android:name="android.permission.WRITE_SETTINGS"/> permission in AndroidManifest.xml. (You should already have had this anyway.)

    Then make sure to copy his code in your activity where you want to show the PDF. Change public static final string SAMPLE_FILE to the actual pdf you want to show (in your assets folder).

    If you get an error on the TAG in Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx())); you must add private static final String TAG = "youractivitynamehere"; just under the public static final String SAMPLE_FILE = "yourfilehere.pdf";

    That's all! Hope anyone else searching for this issue will find this.