2016-04-27 167 views
0

我正在使用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()方法
+0

顯然,'view'是'null'。您尚未顯示「視圖」正在初始化的位置。 – CommonsWare

+0

您認爲obejct似乎爲空 –

+0

您是在哪裏初始化查看視圖? –

回答

1

,只需添加

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

調用檢查權限之前。

+0

但findViewById本身返回一個視圖,我們是否需要再次使用View類型轉換它? –

2

findViewById()調用應與活動生命週期相關聯。

應該在調用setContentView後調用它。

相關問題