Java 取消装箱hashmap.get()会产生NullPointerException

Java 取消装箱hashmap.get()会产生NullPointerException,java,android,nullpointerexception,hashmap,Java,Android,Nullpointerexception,Hashmap,我正在使用hashmap从另一个类获取数据。我检查logcat,hashmap的数据已经设置好,并且它包含密钥。但是当我尝试从另一个类获取hashmap时,我得到的是NullPointerException,当我尝试检查map是否包含键时,它没有 @凌驾 公共布尔值OnOptions ItemSelectedMenuItem项{ 开关item.getItemId{ 案例R.id.continueItem: CustomAdapter a=新的CustomAdapter; CustomAdapte

我正在使用hashmap从另一个类获取数据。我检查logcat,hashmap的数据已经设置好,并且它包含密钥。但是当我尝试从另一个类获取hashmap时,我得到的是NullPointerException,当我尝试检查map是否包含键时,它没有

@凌驾 公共布尔值OnOptions ItemSelectedMenuItem项{ 开关item.getItemId{ 案例R.id.continueItem: CustomAdapter a=新的CustomAdapter; CustomAdapter.InputTextListener i=a.new InputTextListener; HashMap HashMap=i.getHashMap; inputTime=hashMap.getEDITTEXT值; Log.dTAG,onoptionItemSelected:+hashMap.getEDITTEXT值; Log.dTAG,onOptionsItemSelected:+hashMap.ContainesKeyEdit文本值; 检索输入时间输入时间; 打破 } 返回super.on选项ItemSelectedItem; } 公共类CustomAdapter扩展了RecyclerView.Adapter{ 私有静态最终字符串标记=CustomAdapter; private ArrayList mWorkTW=新的ArrayList; private ArrayList mWorkET=新建ArrayList; private ArrayList mRestTW=新的ArrayList; private ArrayList mRestET=新的ArrayList; 私有上下文; 私有整数间隔; 公共自定义适配器{ } 公共CustomAdapterContext上下文,ArrayList mWorkTW,ArrayList mWorkET,ArrayList MresTw,ArrayList mRestET,int numberofInterval{ this.mWorkTW=mWorkTW; this.mWorkET=mWorkET; this.mRestTW=mRestTW; this.mRestET=mRestET; this.mContext=上下文; this.numberofinterval=numberofinterval; //this.inputTimeIntegerWET=inputTimeIntegerWET; Log.dTAG,CustomAdapter:+numberofInterval; } @非空 @凌驾 公众观众onCreateViewHolder@NonNull视图组视图组,int i{ View customView=LayoutInflater.fromviewGroup.getContext.inflateR.layout.time\u行,视图组,false; ViewHolder=new ViewHoldercustomView,new InputTextListener; 报税表持有人; } @凌驾 公共空间onBindViewHolder@NonNull最终视图持有者视图持有者,最终int i{ Log.dTAG,onBindViewHolder:调用; viewHolder.workTextView.setTextR.string.work\u text\u视图; viewHolder.restextview.setTextR.string.rest\u text\u视图; viewHolder.workEditText.SetOnFocusChangeListener新建视图.OnFocusChangeListener{ public void onFocusChangeView v,布尔hasFocus{ 如果有焦点 viewHolder.workEditText.setHint; 其他的 viewHolder.workEditText.SethintWorket.getviewHolder.getAdapterPosition; } }; viewHolder.RestedText.SetOnFocusChangeListener新建视图.OnFocusChangeListener{ public void onFocusChangeView v,布尔hasFocus{ 如果有焦点 viewHolder.restedText.setHint; 其他的 viewHolder.restEditText.setHintmRestET.getviewHolder.getAdapterPosition; } }; } @凌驾 公共整数getItemCount{ Log.dTAG,+numberofinterval; 返回间隔数; } 公共类ViewHolder扩展了RecyclerView.ViewHolder{ 公共InputExtListener InputExtListener; 文本视图工作文本视图; 编辑文本工作编辑文本; 文本视图restTextView; 编辑文本restedtext; 约束布局; 平民的ViewHolder@NonNull查看项目视图,InputExtListener InputExtListener{ 上级观点; workTextView=itemView.findViewByIdR.id.workTextView; workEditText=itemView.findViewByIdR.id.workEditText; restTextView=itemView.findViewByIdR.id.restTextView; restedText=itemView.findviewbydr.id.restedText; parentLayout=itemView.findviewbydr.id.parentLayout; this.inputExtListener=inputExtListener; workEditText.addTextChangedListenerinputTextListener; } } 类InputTextListener实现TextWatcher{ 字符串inputTimeString; 输入时间; HashMap HashMap=新的HashMap; 公共HashMap getHashMap{ 返回hashMap; } 公共输入文本侦听器{ } 公共void setHashMapHashMap hashMap{ this.hashMap=hashMap; } /*公共整数getInputTime{ 返回输入时间; }*/ 公共作废设置输入时间输入时间{ 这个.inputTime=inputTime; } @凌驾 public void beforeTextChangedCharSequence s,int start,int count,int after{ } @凌驾 public void onTextChangedCharSequence s,int start,int before, 整数计数{ 试一试{ Log.dTAG,onTextChanged:我已经到达这里了!; inputTimeString=s.toString.trim; inputTime=Integer.parseIntinputTimeString; 设置输入时间输入时间; hashMap.putEDITTEXT值,输入时间; Log.dTAG,onTextChanged:+inputTime; int bla=输入时间+2; Log.dTAG,onTextChanged:+bla; Log.dTAG,onTextChanged:+hashMap.containsKeyEDITTEXT值; Log.dTAG,onTextChanged:+hashMap.getEDITTEXT值; setHashMaphashMap; }捕获编号格式异常NFE{ mWorkET=null; } } @凌驾 公共无效后可更改的可删除项{ } } }
我希望hashmap能够访问另一个类中的数据。

以下是您发布的一些代码:

这将要做的是创建CustomAdapter类的新实例,然后创建InputTextListener类的新实例,最后检索存储在文本侦听器中的HashMap

同样,这些类的新实例都会发生这种情况。因此,HashMap是空的,因为没有填充任何内容

您可能假设我是应用程序中其他地方使用的同一个侦听器实例。事实并非如此。您需要以某种方式访问该侦听器,而不是创建新实例

看看你的代码,这似乎不太可行。每个ViewHolder都有自己的InputExtListener实例。。。您的“选项”菜单如何知道要与哪个视图持有者交互


很有可能您需要回到绘图板,想出一种不同的方法来解决您试图解决的任何问题。

如果在调用i.getHashMap的行上设置一个断点,我是否初始化了?如果取消装箱给出了NPE,这意味着HashMap.get返回null。如果该键不存在,或者该键的值为null,则可能发生这种情况。CustomAdapter、getHashMap和的代码不在您的问题中,因此我们可以更进一步。@Stephen C我已经为CustomAdapter添加了代码,但通过我自己的调试,我可以说hashmap包含键和,并且值不为空。@AbsoluteSpace当我检查调试工具时,它说大小为0。这是否意味着我还没有初始化hashmap?@NobeelGardenish从您为InputTextListener类发布的代码来看,构造函数和getHashMap方法似乎都没有初始化hashmap。也许在这之前你需要一些方法调用来给它一些值?
CustomAdapter a = new CustomAdapter();
CustomAdapter.InputTextListener i = a.new InputTextListener();
HashMap<String, Integer> hashMap = i.getHashMap();