我正在使用Android API 23.我試圖根據建議的新API請求運行時用戶的權限。這是我的實現。NullPointerException異常Android getContext()
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);
}
}
在手機上運行代碼時,Android Studio中出現以下錯誤。
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.view.ViewGroup.getContext()' on a null object reference
完整回溯是在這裏:
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)
線requestPermission
271:
Snackbar.make(view,requestText,Snackbar.LENGTH_INDEFINITE).setAction("Ok",...);
我onCreate
看起來是這樣的:
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);
我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>
我在哪裏出錯了,我該如何解決這個問題?
在onCreate()方法
顯然,'view'是'null'。您尚未顯示「視圖」正在初始化的位置。 – CommonsWare
您認爲obejct似乎爲空 –
您是在哪裏初始化查看視圖? –