Android 为什么我在logcat中的glide返回错误上下文可以为null?

Android 为什么我在logcat中的glide返回错误上下文可以为null?,android,android-glide,Android,Android Glide,我对使用glide是个新手。我试图从外部存储器加载映像,但在logcat中出错: 我的recycleview适配器使用glide加载映像: List<TourModel> mItems; private Context mContext; public class ViewHolder extends RecyclerView.ViewHolder{ public ImageView mIvMain,mIvStar1,mIvStar2,mIvSta

我对使用glide是个新手。我试图从外部存储器加载映像,但在logcat中出错:

我的recycleview适配器使用glide加载映像:

List<TourModel> mItems;
    private Context mContext;

    public class ViewHolder extends RecyclerView.ViewHolder{
        public ImageView mIvMain,mIvStar1,mIvStar2,mIvStar3,mIvStar4,mIvStar5;
        public TextView mTvTitle,mTvPrice;
        public RelativeLayout mLayoutContainer;
        public ViewHolder(View mItemView) {
            super(mItemView);
            mIvMain = (ImageView) mItemView.findViewById(R.id.listFragmentMain_IvMain);
            mIvStar1= (ImageView) mItemView.findViewById(R.id.listFragmentMain_IvStar1);
            mIvStar2= (ImageView) mItemView.findViewById(R.id.listFragmentMain_IvStar2);
            mIvStar3= (ImageView) mItemView.findViewById(R.id.listFragmentMain_IvStar3);
            mIvStar4= (ImageView) mItemView.findViewById(R.id.listFragmentMain_IvStar4);
            mIvStar5= (ImageView) mItemView.findViewById(R.id.listFragmentMain_IvStar5);
            mTvTitle = (TextView) mItemView.findViewById(R.id.listFragmentMain_TvTitle);
            mTvPrice = (TextView) mItemView.findViewById(R.id.listFragmentMain_TvPrice);
            mLayoutContainer = (RelativeLayout)mItemView.findViewById(R.id.listFragmentMain_LayoutContainer);
        }
    }

    public TourListRvAdapter(Context mContext,List<TourModel> mModel) {
        this.mItems = mModel;
        this.mContext = mContext;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup mViewGroup, int i) {
        View mView = LayoutInflater.from(mViewGroup.getContext()).inflate(R.layout.list_fragment_main, mViewGroup, false);
        ViewHolder mViewHold = new ViewHolder(mView);
        return mViewHold;
    }

    @Override
    public void onBindViewHolder(ViewHolder mViewHolder, int position) {
        final TourModel mItems=this.mItems.get(position);
        mViewHolder.mTvTitle.setText(mItems.getTitle());
        mViewHolder.mTvPrice.setText(mItems.getPrice() + "");

        Glide.with(mContext)
                .load(Utility.LoadFileImg(mItems.getImage()))
                .into(mViewHolder.mIvMain);
    }
列出螨类;
私有上下文;
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公共图像视图mIvMain、mIvStar1、mIvStar2、mIvStar3、mIvStar4、mIvStar5;
公共文本查看mTvTitle、mTvPrice;
公共相对物放置容器;
公共视图持有者(视图视图视图){
超级(mItemView);
mIvMain=(ImageView)mItemView.findViewById(R.id.listFragmentMain_IvMain);
mIvStar1=(ImageView)mItemView.findViewById(R.id.listFragmentMain_IvStar1);
mIvStar2=(ImageView)mItemView.findViewById(R.id.listFragmentMain_IvStar2);
mIvStar3=(ImageView)mItemView.findViewById(R.id.listFragmentMain_IvStar3);
mIvStar4=(ImageView)mItemView.findViewById(R.id.listFragmentMain_IvStar4);
mIvStar5=(ImageView)mItemView.findViewById(R.id.listFragmentMain_IvStar5);
mTvTitle=(TextView)mItemView.findViewById(R.id.listFragmentMain\u TvTitle);
mTvPrice=(TextView)mItemView.findViewById(R.id.listFragmentMain\u TvPrice);
mLayoutContainer=(RelativeLayout)mItemView.findViewById(R.id.listFragmentMain\u LayoutContainer);
}
}
公共TourListRvAdapter(上下文mContext、列表mModel){
this.mItems=mModel;
this.mContext=mContext;
}
@凌驾
公共视图持有者onCreateViewHolder(视图组mViewGroup,int i){
查看mView=LayoutInflater.from(mViewGroup.getContext()).flate(R.layout.list\u fragment\u main,mViewGroup,false);
ViewHolder mViewHold=新的ViewHolder(mView);
返回mViewHold;
}
@凌驾
BindViewHolder上的公共无效(ViewHolder mViewHolder,内部位置){
最终TourModel mItems=this.mItems.get(位置);
mViewHolder.mTvTitle.setText(mItems.getTitle());
mViewHolder.mTvPrice.setText(mItems.getPrice()+);
使用(mContext)滑动
.load(Utility.LoadFileImg(mItems.getImage()))
.into(mViewHolder.mIvMain);
}
还有我的片段活动,它调用recycleview适配器并向其添加变量上下文

Public class TourListFragment extends Fragment {
    private static final String TAG = TourListFragment.class.getSimpleName();
    private final Context mContext = getActivity();

    private int position;
    private List<TourModel> mListItem;

    private RecyclerView mRecycleView;

    private TourListRvAdapter mTouListAdapter;

    public static TourListFragment newInstance(int position) {
        TourListFragment f = new TourListFragment();
        Bundle b = new Bundle();
        b.putInt(VariableConstants.POSITION, position);
        f.setArguments(b);
        return f;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        position = getArguments().getInt(VariableConstants.POSITION);
        TourDAO mDao = new TourDAO(getContext());
        mListItem = mDao.getAllDataReturnModel();

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Log.e(TAG, "" + position);

            View rootView = inflater.inflate(R.layout.fragment_main, container, false);

            mRecycleView = (RecyclerView) rootView.findViewById(R.id.fragmentMain_RvTourList);
            mRecycleView .setHasFixedSize(true); // in content do not change the layout size of the RecyclerView
            RecyclerView.LayoutManager mLayoutManager= new LinearLayoutManager(mContext); // use a linear layout manager
            mRecycleView.setLayoutManager(mLayoutManager);

            mTouListAdapter = new TourListRvAdapter(mContext,mListItem);
            mRecycleView.setAdapter(mTouListAdapter);

            //iewCompat.setElevation(rootView, 50);
            return rootView;

    }
}
公共类TourListFragment扩展了片段{
私有静态最终字符串标记=TourListFragment.class.getSimpleName();
私有最终上下文mContext=getActivity();
私人职位;
私人名单;
私人回收视图mRecycleView;
私人旅行社;MTOULISTAPTER;
公共静态TourListFragment newInstance(int位置){
TourListFragment f=新TourListFragment();
Bundle b=新Bundle();
b、 putInt(可变常数.POSITION,POSITION);
f、 设置参数(b);
返回f;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
position=getArguments().getInt(VariableConstants.position);
TourDAO mDao=新的TourDAO(getContext());
mListItem=mDao.getAllDataReturnModel();
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
Log.e(标签“”+位置);
视图根视图=充气机。充气(R.layout.fragment_main,容器,错误);
mRecycleView=(RecyclerView)rootView.findviewbyd(R.id.fragmentMain\u RvTourList);
mRecycleView.setHasFixedSize(true);//在内容中不要更改RecycleView的布局大小
RecyclerView.LayoutManager mLayoutManager=新建LinearLayoutManager(mContext);//使用线性布局管理器
mRecycleView.setLayoutManager(mLayoutManager);
mTouListAdapter=新的TourListRvAdapter(mContext,mListItem);
mRecycleView.setAdapter(mtoulistapter);
//iewCompat.setElevation(根视图,50);
返回rootView;
}
}

我不知道为什么我的变量mContext返回null,有人能帮我吗?请。

使用
mViewHolder.itemView.getContext()
,该上下文与您在
onCreateViewHolder
中用于膨胀视图的上下文相同,而不是在适配器中保留对的引用
mContext
为空,因为您正在初始化成员

private final Context mContext = getActivity();

该片段当时没有经过其生命周期,getActivity()返回null,而不是在适配器中保留对的引用
mContext
为空,因为您正在初始化成员

private final Context mContext = getActivity();

片段当时没有经历其生命周期,getActivity()返回null

,这与您在onCreateViewHolder中使用的上下文相同。。。所以还是空的。。。因为主要问题是
private final Context mContext=getActivity()在片段中可能是拙劣的@Selvin
onCreateViewHolder
正在使用视图组为视图充气。那个这就是我的意思我已经更改了,谢谢,你的代码是work:)@blackbelt,这与你在onCreateViewHolder中使用的上下文相同。。。所以还是空的。。。因为主要问题是
private final Context mContext=getActivity()在片段中可能是拙劣的@Selvin
onCreateViewHolder
正在使用视图组为视图充气。那个这就是我的意思我已经更改了,谢谢,你的代码是工作:)@Blackbelt