Newtt
Newtt

Reputation: 6190

NullPointerException Android getContext()

I am using Android API 23. I'm trying to request permissions from the user on runtime as is recommended for the new API. This is my implementation.

private void requestPermission(String type){
    String permission = "";
    String requestText = "";
    if(type.equals("video")){
        permission = Manifest.permission.CAMERA;
        requestText = "Need Camera Permission";
    }else if(type.equals("picture")){
        permission = Manifest.permission.CAMERA;
        requestText = "Need Camera Permission";
    }else if(type.equals("audio")){
        permission = Manifest.permission.RECORD_AUDIO;
        requestText = "Need Audio Permission";
    }

    if(ActivityCompat.shouldShowRequestPermissionRationale(this, permission)){
        Snackbar.make(view, requestText, Snackbar.LENGTH_INDEFINITE).setAction("Ok",
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CODE);
                    }
                });
    }else {
        Snackbar.make(view, "Permission is not available. Requesting camera permission.", Snackbar.LENGTH_SHORT).show();
        ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CODE);
    }
}

On running the code on the phone, I get the following error in Android Studio.

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.view.ViewGroup.getContext()' on a null object reference

The full traceback is here:

FATAL EXCEPTION: main
Process: com.xxxxx.gcmtest, PID: 4779
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.view.ViewGroup.getContext()' on a null object reference
at android.support.design.widget.Snackbar.<init>(Snackbar.java:183)
at android.support.design.widget.Snackbar.make(Snackbar.java:215)
at com.xxxxx.gcmtest.ConversationActivity.requestPermission(ConversationActivity.java:271)
at com.xxxxx.gcmtest.ConversationActivity.onClick(ConversationActivity.java:185)
at android.view.View.performClick(View.java:5201)
at android.view.View$PerformClick.run(View.java:21163)
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)

Line 271 of requestPermission is:

Snackbar.make(view,requestText,Snackbar.LENGTH_INDEFINITE).setAction("Ok",...);

My onCreate looks like this:

private ChatAdapter chatAdapter;
private ListView listView;
private Button buttonSendAudio;
private Button buttonSendVideo;
private Button buttonSendPicture;
private boolean side = false;
private String fileType;
private Context context;
private static final int PERMISSION_REQUEST_CODE = 1;
private View view;
private Activity activity;
view = findViewById(R.id.chat_layout);

My fragment.xml:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:id="@+id/chat_layout">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:id="@+id/textView"
        android:layout_gravity="center_horizontal" />
    <ListView
        android:id="@+id/list_conversations"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="80dp">
    </ListView>

    <RelativeLayout
        android:id="@+id/form"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:orientation="vertical" >

    </RelativeLayout>
</RelativeLayout>

Where am I going wrong and how do I fix this?

Upvotes: 0

Views: 3267

Answers (2)

Simas
Simas

Reputation: 44118

findViewById() call should be connected with the activity lifecycle.

It should be called after you've called setContentView.

Upvotes: 2

Angel Koh
Angel Koh

Reputation: 13485

in your onCreate() method, just add

view = (View) findViewById(R.id.form); 

before you call the check permission.

Upvotes: 1

Related Questions