简体   繁体   English

java.lang.NullPointerException:尝试在空对象引用上调用接口方法“java.util.Iterator java.util.List.iterator()”

[英]java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference

I m currently working on a android apps which fetch data from parse server.我目前正在开发一个从解析服务器获取数据的 android 应用程序。 I wanted to filter my recyclerView by using searchview.我想使用 searchview 过滤我的 recyclerView。 But it shows me nothing while search.但是在搜索时它什么也没显示。 It gives me error in this line*for (ParseObject parseObject : mRooms){ * Please help me to edit my code regarding this issues.它在这一行中给我错误*for (ParseObject parseObject : mRooms){ * 请帮助我编辑有关此问题的代码。

roomcardrecyclerviewadapter房卡回收器视图适配器

private List<ParseObject> mRooms = new ArrayList<>();
private ArrayList<ParseObject> filterlist;
private ParseObject room;
private String mSection;
private Context context;

public RoomCardRecyclerViewAdapter(){
    super(DIFF_CALLBACK);
}
public static final DiffUtil.ItemCallback<ParseObject>  DIFF_CALLBACK = new 
DiffUtil.ItemCallback<ParseObject>() {
    @Override
    public boolean areItemsTheSame(@NonNull ParseObject oldItem, @NonNull ParseObject newItem) {
        return oldItem.getObjectId() == newItem.getObjectId();
    }

    @Override
    public boolean areContentsTheSame(@NonNull ParseObject oldItem, @NonNull ParseObject newItem) {
        return (oldItem.getUpdatedAt().equals(newItem.getUpdatedAt()) && 
oldItem.getCreatedAt().equals(newItem.getCreatedAt()));
    }
};


public RoomCardRecyclerViewAdapter(String section) {
    this();

    this.mSection = section;
}
public RoomCardRecyclerViewAdapter(Context context, List<ParseObject>arrayList) {
    this();

    this.context = context;
    mRooms = arrayList;
    filterlist = (ArrayList<ParseObject>) arrayList;
}


public class RoomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    protected ImageView mRoomImage;
    protected TextView mRoomPrice;
    protected TextView mInclusiveOrNot;
    protected TextView mPropertyType;
    protected TextView mNumOfBeds;
    protected TextView mNumOfBaths;
    protected TextView mRoomLocation;

    private Context context;

    public RoomViewHolder(Context context, View itemView) {
        super(itemView);
        mRoomImage = itemView.findViewById(R.id.room_image);
        mRoomPrice = itemView.findViewById(R.id.price_label);
        mInclusiveOrNot = itemView.findViewById(R.id.incl_excl_label);
        mPropertyType = itemView.findViewById(R.id.propertyType_label);
        mNumOfBeds = itemView.findViewById(R.id.num_beds_label);
        mNumOfBaths = itemView.findViewById(R.id.details_num_baths_label);
        mRoomLocation = itemView.findViewById(R.id.location_label);
        this.context = context;
        //set onclick listener
        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Log.i("Click event: ", "My room has been clicked.");
        int pos = getAdapterPosition();
        Intent intent;
        ParseObject room = getCurrentList().get(pos);

        //create the ParseObject proxy
        ParseProxyObject roomProxy = new ParseProxyObject(room);
        Toast.makeText(context, room.getString("roomSuburb"), Toast.LENGTH_LONG).show();
        //fork to corresponding activity
        if(mSection != null) {
            Log.i("mSection text: ", "mSection text is: " + mSection);
            if (mSection.equals("My Rooms")) {
                //start my rooms detail activity
                Log.i("My room: ", "Room selected " + roomProxy.getObjectId());
                intent = new Intent(context, MyRoomDetailActivity.class);
                //add the room to the intent
                intent.putExtra("currentSelectedRoomObject", room);
                Log.i("Selected room", "Put Extra, " + room);
                intent.putExtra("roomObject", roomProxy);
                context.startActivity(intent);
            }
        }else {
            Log.i("My room:", "RoomDetailActivity loaded for MyRoomDetail Activity instead");
            intent = new Intent(context, RoomDetailActivity.class);
            //add the proxy to the intent
            intent.putExtra("roomObject", roomProxy);
            context.startActivity(intent);
        }

    }
}

@Override
public RoomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    //inflating the viewholder with the appropriate views
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.room_cardview, parent, 
false);

    return new RoomViewHolder(parent.getContext(), view);
}

@Override
public void onBindViewHolder(@NonNull RoomViewHolder holder, int position) {
    room = getItem(position);
    holder.mRoomLocation.setText(room.getString("roomSuburb"));
    holder.mRoomPrice.setText(Integer.toString(room.getInt("roomMonthlyRent")));
    holder.mInclusiveOrNot.setText(room.getString("roomRentInclusiveOfBills"));
    holder.mPropertyType.setText(room.getString("roomPropertyType"));
    holder.mNumOfBeds.setText(Integer.toString(room.getInt("roomBedrooms")));
    holder.mNumOfBaths.setText(Integer.toString(room.getInt("roomBathrooms")));

   

@Override
public Filter getFilter(){
  return new Filter() {
      @Override
      protected FilterResults performFiltering(CharSequence charSequence) {

String charString = charSequence.toString();
if (charString.isEmpty()){
room = (ParseObject) mRooms;

}else {
List<ParseObject> filteredList = new ArrayList<>();
for (ParseObject parseObject : mRooms){
    if (parseObject.getString("roomSuburb").toLowerCase().contains(charString.toLowerCase())){
        filteredList.add(parseObject);
    }
}
room = (ParseObject) filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = room;

return filterResults;

      }

      @Override
      protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
          room = (ParseObject) filterResults.values;
          notifyDataSetChanged();
      }
  };

}

mainActivity主要活动

mHomeSectionsPagerAdapter = new 
HomeSectionsPagerAdapter(getSupportFragmentManager());
    roomCardRecyclerViewAdapter = new RoomCardRecyclerViewAdapter(this, 
mRooms);
    mRooms = new ArrayList<>();
    // Set up the ViewPager with the sections adapter.
    mViewPager = findViewById(R.id.container);
    mViewPager.setAdapter(mHomeSectionsPagerAdapter);

    
     
    

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    final ParseQuery<ParseUser> query = ParseUser.getQuery();

    
    //get the search view and set the searchable configuration
    SearchManager searchManager = (SearchManager) 
getSystemService(Context.SEARCH_SERVICE);
   
    MenuItem item = menu.findItem(R.id.search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);

    //assumes the current activity is the searchable activity
    

searchView.setSearchableInfo(searchManager.getSearchableInfo
(getComponentName());

    searchView.setSubmitButtonEnabled(true);

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            roomCardRecyclerViewAdapter.getFilter().filter(query);
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            roomCardRecyclerViewAdapter.getFilter().filter(newText);
            return false;
        }
    });

    return true;
}


@Override
public boolean onSearchRequested() {

    //pauseSomeStuff();

    //roomCardRecyclerViewAdapter.getFilter().filter(query);
    return super.onSearchRequested();
}

I think problem is here:我认为问题在这里:

You haven't shared first lines of MainActivity where you declare your variables.您尚未共享MainActivity第一行,您在其中声明了变量。 So, I assume that you have some code like this:所以,我假设你有一些这样的代码:

List mRooms;

Then I assume that, before assigning value to this mRooms you have passed it to RoomCardRecyclerViewAdapter :然后我假设,在给这个mRooms赋值之前,你已经将它传递给RoomCardRecyclerViewAdapter

roomCardRecyclerViewAdapter = new RoomCardRecyclerViewAdapter(this, mRooms);
mRooms = new ArrayList<>();

Then you have assigned value to mRooms .然后您已为mRooms分配了值。 That's why you get NPE.这就是您获得 NPE 的原因。 You can solve this problem just like this:你可以像这样解决这个问题:

mRooms = new ArrayList<>();
roomCardRecyclerViewAdapter = new RoomCardRecyclerViewAdapter(this, mRooms);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 过滤器出错:尝试在空对象引用上调用接口方法&#39;java.util.Iterator java.util.List.iterator()&#39; - Error on filter: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference java.lang.NullPointerException:尝试在从服务器到微调器的空对象引用上调用接口方法“int java.util.List.size()” - java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference from server to spinner Error: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference - Error: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference java.lang.NullPointerException:尝试调用接口方法&#39;java.lang.Object java.util.List.get(int)&#39; - java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' java.util.Iterator<java.lang.Object[]> 无法转换为 java.util.Iterator<T[]> - java.util.Iterator<java.lang.Object[]> cannot be converted to java.util.Iterator<T[]> java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“boolean java.util.ArrayList.add(java.lang.Object)” - java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference 尝试在空对象引用上调用接口方法&#39;java.lang.Object [] java.util.Collection.toArray()&#39; - Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference 关闭java.util.Iterator - Closing a java.util.Iterator java.util.Iterator但不能导入java.util.Iterator - java.util.Iterator but cannot import java.util.Iterator 未经检查的分配:“匿名java.util.Iterator”到“ java.util.Iterator” <java.lang.Integer> &#39; - Unchecked assignment: 'anonymous java.util.Iterator' to 'java.util.Iterator<java.lang.Integer>'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM