Android 导航抽屉空指针异常

Android 导航抽屉空指针异常,android,nullpointerexception,navigation-drawer,android-recyclerview,Android,Nullpointerexception,Navigation Drawer,Android Recyclerview,我的导航抽屉里有一个回收视图。我一直得到一个空指针异常。我看过类似的问题,但似乎没有一个对我有解决办法。请帮助。我不知道是什么问题。Gradle具有所有必需的依赖项 activity_expert.xml <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"

我的导航抽屉里有一个回收视图。我一直得到一个空指针异常。我看过类似的问题,但似乎没有一个对我有解决办法。请帮助。我不知道是什么问题。Gradle具有所有必需的依赖项

activity_expert.xml

 <android.support.v4.widget.DrawerLayout     xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:id="@+id/drawerlayout">

<!--Content Section-->
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/mainContent">

    <include layout="@layout/toolbar"></include>

    <!--Main Content-->
    <android.support.v7.widget.RecyclerView
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:id="@+id/mainContentView">
    </android.support.v7.widget.RecyclerView>

    </FrameLayout>

<!--Drawer section-->

    <android.support.v7.widget.RecyclerView
        android:layout_width="240dp"
        android:layout_height="wrap_content"
        android:id="@+id/drawer_recycler_view"
        android:layout_gravity="start"
        android:background="@color/white"
        android:scrollbars="vertical">
    </android.support.v7.widget.RecyclerView>
}

最后是dradrapter.java

package com.lavineoluoch.myapplication.cowsoko.appUtils;

import android.provider.Telephony;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.lavineoluoch.myapplication.cowsoko.R;

import java.util.List;

import butterknife.ButterKnife;
import butterknife.InjectView;

/**
* Created by USER on 8/7/2015.
*
* This class is the RecyclerView Adapter
*/
public class DrawerAdapter extends     RecyclerView.Adapter<DrawerAdapter.ViewHolder> {

private static final int HEADER_TYPE = 0;
private static final int ITEM_TYPE = 1;
private String NavTitles[];
private int NavIcons[];


public DrawerAdapter(String NavTitles[],int NavIcons[]) {
    this.NavTitles = NavTitles;
    this.NavIcons = NavIcons;
}

//Called whenever a new instance of our ViewHolder class is created
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
   if (viewType == ITEM_TYPE){
       View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.drawer_row,parent,false);
       ViewHolder viewHolderItem = new ViewHolder(v,viewType);
       return viewHolderItem;
   }else if (viewType == HEADER_TYPE){
       View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.drawer_header,parent,false);
       ViewHolder viewHolderHeader = new ViewHolder(v,viewType);
       return viewHolderHeader;
   }

    return null;
}

//Called when the SO binds the view with the data -- or, in other words, the data is shown in the UI
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    if (holder.holderId == 1){
       holder.textView.setText(NavTitles[position - 1]);
       holder.imageView.setImageResource(NavIcons[position - 1]);
    }

}

@Override
public int getItemCount() {

    return NavTitles.length + 1;    }

@Override
public int getItemViewType(int position) {
    if (position == 0)
        return HEADER_TYPE;

    return ITEM_TYPE;

}


/**
 * A ViewHolder describes an item view and metadata about its place within the RecyclerView.
 * RecyclerView.Adapter implementations should subclass ViewHolder and add fields for
 * caching potentially expensive findViewById(int) results.
 *
 */


public static class ViewHolder extends RecyclerView.ViewHolder{
    protected int holderId;
    @InjectView(R.id.rowIcon)ImageView imageView;
    @InjectView(R.id.rowText)TextView textView;

    /**
     *
     * @param itemView
     * @param viewType
     */
    public ViewHolder(View itemView,int viewType) {

        super(itemView);

        this.holderId = viewType;
        if (viewType == ITEM_TYPE){
            ButterKnife.inject(this,itemView);
            holderId = 1;
        }else {
            holderId = 0;
        }
    }
}
package com.lavineoluoch.myapplication.cowsoko.appUtils;
导入android.provider.Telephony;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入android.widget.TextView;
导入com.lavineoluoch.myapplication.cowsoko.R;
导入java.util.List;
进口毛刀,毛刀;
导入butterknife.InjectView;
/**
*用户于2015年8月7日创建。
*
*此类是RecyclerView适配器
*/
公共类DrawerDatapter扩展了RecyclerView.Adapter{
私有静态最终整数头类型=0;
私有静态最终整数项_TYPE=1;
私有字符串导航标题[];
私人国际航空公司[];
公共抽屉导航器(字符串导航标题[],国际导航图标[]){
this.NavTitles=导航标题;
这是NavIcons=NavIcons;
}
//每当创建ViewHolder类的新实例时调用
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
如果(视图类型==项目类型){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.drawer\u行,parent,false);
ViewHolder viewHolderItem=新的ViewHolder(v,viewType);
返回viewHolderItem;
}else if(viewType==标题类型){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.drawer\u标题,parent,false);
ViewHolder viewHolderHeader=新的ViewHolder(v,viewType);
返回viewHolderHeader;
}
返回null;
}
//当SO将视图与数据绑定时调用,或者换句话说,数据显示在UI中
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
if(holder.holderId==1){
holder.textView.setText(导航标题[位置-1]);
holder.imageView.setImageResource(NavIcons[位置-1]);
}
}
@凌驾
public int getItemCount(){
返回NavTitles.length+1;}
@凌驾
public int getItemViewType(int位置){
如果(位置==0)
返回头类型;
返回项目类型;
}
/**
*ViewHolder描述项目视图及其在RecyclerView中位置的元数据。
*适配器实现应该为ViewHolder子类,并为其添加字段
*缓存可能非常昂贵的findViewById(int)结果。
*
*/
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
受保护的int holderId;
@InjectView(R.id.rowIcon)图像视图图像视图;
@InjectView(R.id.rowText)TextView TextView;
/**
*
*@param itemView
*@param-viewType
*/
公共视图持有者(视图项视图、int视图类型){
超级(项目视图);
this.holderId=视图类型;
如果(视图类型==项目类型){
ButterKnife.inject(这个,itemView);
holderId=1;
}否则{
holderId=0;
}
}
}
}

我的logcat看起来像这样

08-08 19:26:35.847 18694-18694/com.lavineoluoch.myapplication.cowsoko E/AndroidRuntime﹕ 致命异常:主 java.lang.NullPointerException 位于android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1764) 在android.view.view.measure(view.java:16030) 位于android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012) 位于android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 在android.view.view.measure(view.java:16030) 位于android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:868)
在android.view.view.measure(view.java:16030)

我使用以下代码来解决这个问题:

LayoutInflater layoutInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.nav_header, mNavigationView);

我使用此代码来解决此问题:

LayoutInflater layoutInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.nav_header, mNavigationView);

您将什么指定为mNavigationView?这似乎是我需要的,但我不完全确定该视图组是如何设置的。您指定了什么作为mNavigationView?这似乎是我需要的,但我不完全确定该视图组是如何设置的。
package com.lavineoluoch.myapplication.cowsoko.appUtils;

import android.provider.Telephony;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.lavineoluoch.myapplication.cowsoko.R;

import java.util.List;

import butterknife.ButterKnife;
import butterknife.InjectView;

/**
* Created by USER on 8/7/2015.
*
* This class is the RecyclerView Adapter
*/
public class DrawerAdapter extends     RecyclerView.Adapter<DrawerAdapter.ViewHolder> {

private static final int HEADER_TYPE = 0;
private static final int ITEM_TYPE = 1;
private String NavTitles[];
private int NavIcons[];


public DrawerAdapter(String NavTitles[],int NavIcons[]) {
    this.NavTitles = NavTitles;
    this.NavIcons = NavIcons;
}

//Called whenever a new instance of our ViewHolder class is created
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
   if (viewType == ITEM_TYPE){
       View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.drawer_row,parent,false);
       ViewHolder viewHolderItem = new ViewHolder(v,viewType);
       return viewHolderItem;
   }else if (viewType == HEADER_TYPE){
       View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.drawer_header,parent,false);
       ViewHolder viewHolderHeader = new ViewHolder(v,viewType);
       return viewHolderHeader;
   }

    return null;
}

//Called when the SO binds the view with the data -- or, in other words, the data is shown in the UI
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    if (holder.holderId == 1){
       holder.textView.setText(NavTitles[position - 1]);
       holder.imageView.setImageResource(NavIcons[position - 1]);
    }

}

@Override
public int getItemCount() {

    return NavTitles.length + 1;    }

@Override
public int getItemViewType(int position) {
    if (position == 0)
        return HEADER_TYPE;

    return ITEM_TYPE;

}


/**
 * A ViewHolder describes an item view and metadata about its place within the RecyclerView.
 * RecyclerView.Adapter implementations should subclass ViewHolder and add fields for
 * caching potentially expensive findViewById(int) results.
 *
 */


public static class ViewHolder extends RecyclerView.ViewHolder{
    protected int holderId;
    @InjectView(R.id.rowIcon)ImageView imageView;
    @InjectView(R.id.rowText)TextView textView;

    /**
     *
     * @param itemView
     * @param viewType
     */
    public ViewHolder(View itemView,int viewType) {

        super(itemView);

        this.holderId = viewType;
        if (viewType == ITEM_TYPE){
            ButterKnife.inject(this,itemView);
            holderId = 1;
        }else {
            holderId = 0;
        }
    }
}
LayoutInflater layoutInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.nav_header, mNavigationView);