java.lang.NullPointerException:尝试调用接口方法';java.util.Iterator java.util.List.Iterator();关于空对象引用
我目前正在开发一款android应用程序,它可以从解析服务器获取数据。我想使用searchview过滤我的recyclerView。但它在搜索时什么也没显示。它在这一行中给了我错误*(ParseObject ParseObject:mRooms){*请帮助我编辑有关此问题的代码 RoomCard回收服务适配器java.lang.NullPointerException:尝试调用接口方法';java.util.Iterator java.util.List.Iterator();关于空对象引用,java,android,Java,Android,我目前正在开发一款android应用程序,它可以从解析服务器获取数据。我想使用searchview过滤我的recyclerView。但它在搜索时什么也没显示。它在这一行中给了我错误*(ParseObject ParseObject:mRooms){*请帮助我编辑有关此问题的代码 RoomCard回收服务适配器 private List mRooms=new ArrayList(); 私有数组列表过滤器列表; 私人物品房; 私有字符串mSection; 私人语境; 公共房间卡回收服务适配器(){
private List mRooms=new ArrayList();
私有数组列表过滤器列表;
私人物品房;
私有字符串mSection;
私人语境;
公共房间卡回收服务适配器(){
超级(差异回调);
}
public static final DiffUtil.ItemCallback DIFF_CALLBACK=new
DiffUtil.ItemCallback(){
@凌驾
公共布尔值AreItemsSame(@NonNull ParseObject oldItem,@NonNull ParseObject newItem){
返回oldItem.getObjectId()==newItem.getObjectId();
}
@凌驾
公共布尔值是相同的内容(@NonNull ParseObject oldItem,@NonNull ParseObject newItem){
返回(oldItem.getUpdatedAt().equals(newItem.getUpdatedAt())&&
oldItem.getCreatedAt().equals(newItem.getCreatedAt());
}
};
公共房间卡回收服务适配器(字符串部分){
这个();
this.m节=节;
}
公共RoomCardRecycleServiceAdapter(上下文,ListarrayList){
这个();
this.context=上下文;
mRooms=arrayList;
filterlist=(ArrayList)ArrayList;
}
公共类RoomViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
受保护的图像视图mRoomImage;
受保护的文本视图mRoomPrice;
受保护的文本视图mInclusiveOrNot;
受保护的文本视图mPropertyType;
受保护的文本视图mNumOfBeds;
受保护的文本视图mNumOfBaths;
受保护的文本视图mRoomLocation;
私人语境;
公共RoomViewHolder(上下文、视图项视图){
超级(项目视图);
mRoomImage=itemView.findviewbyd(R.id.room\u图像);
mRoomPrice=itemView.findviewbyd(R.id.price\u标签);
mInclusiveOrNot=itemView.findviewbyd(R.id.incl_不包括标签);
mPropertyType=itemView.findViewById(R.id.propertyType_标签);
mNumOfBeds=itemView.findviewbyd(R.id.num\u beds\u标签);
mNumOfBaths=itemView.findviewbyd(R.id.details\u num\u baths\u标签);
mRoomLocation=itemView.findviewbyd(R.id.location\u标签);
this.context=上下文;
//设置onclick侦听器
setOnClickListener(这个);
}
@凌驾
公共void onClick(视图v){
Log.i(“单击事件:,“我的房间已被单击”);
int pos=getAdapterPosition();
意图;
ParseObject room=getCurrentList().get(pos);
//创建ParseObject代理
ParseProxyObject roomProxy=新的ParseProxyObject(房间);
Toast.makeText(上下文,room.getString(“room郊区”),Toast.LENGTH_LONG.show();
//转向相应的活动
if(mSection!=null){
Log.i(“mssection text:”,“mssection text是:”+mssection);
if(mSection.equals(“我的房间”)){
//开始我的房间细节活动
Log.i(“我的房间:”,“选择的房间”+roomProxy.getObjectId());
intent=新的intent(上下文,MyRoomDetailActivity.class);
//将房间添加到目标中
intent.putExtra(“currentSelectedRoomObject”,房间);
Log.i(“选定房间”、“放置额外房间”+房间);
intent.putExtra(“roomObject”,roomProxy);
背景。开始触觉(意图);
}
}否则{
Log.i(“我的房间:”,改为“为MyRoomDetail活动加载的RoomDetailActivity”);
意图=新意图(上下文、RoomDetailActivity.class);
//将代理添加到意图中
intent.putExtra(“roomObject”,roomProxy);
背景。开始触觉(意图);
}
}
}
@凌驾
public RoomViewHolder onCreateViewHolder(视图组父级,int-viewType){
//使用适当的视图为viewholder充气
View=LayoutFlater.from(parent.getContext())。充气(R.layout.room\u cardview,parent,
假);
返回新的RoomViewHolder(parent.getContext(),视图);
}
@凌驾
public void onBindViewHolder(@NonNull RoomViewHolder,int位置){
房间=获取项目(位置);
holder.mRoomLocation.setText(room.getString(“room郊区”);
holder.mRoomPrice.setText(Integer.toString(room.getInt(“roomMonthlyRent”));
holder.mInclusiveOrNot.setText(room.getString(“roomrentclusiveofbills”);
holder.mPropertyType.setText(room.getString(“roomPropertyType”));
holder.mNumOfBeds.setText(Integer.toString(room.getInt(“roombeddrooms”));
holder.mNumOfBaths.setText(Integer.toString(room.getInt(“roomBathrooms”));
@凌驾
公共过滤器getFilter(){
返回新筛选器(){
@凌驾
受保护过滤器结果执行过滤(CharSequence CharSequence){
String charString=charSequence.toString();
if(charString.isEmpty()){
房间=(ParseObject)mRooms;
}否则{
List filteredList=新建ArrayList();
用于(ParseObject ParseObject:mRooms){
if(parseObject.getString(“RoomSubparent”).toLowerCase()包含(charString.toLowerCase()){
添加(parseObject);
}
}
房间=(ParseObject)过滤器列表;
}
FilterResults FilterResults=新的FilterResults();
filterResults.values=房间;
返回过滤器结果;
}
@凌驾
受保护的无效发布结果(CharSequence CharSequence、FilterResults FilterResults){
room=(ParseObject)filterResults.values;
notifyDataSetChanged();
}
};
}
主要活动
mHomeSectionsPagerAdapter=new
HomeSectionsPagerAdapter(getSupportFragmentManager());
RoomCardRecycleServiceAdapter=新的RoomCardRecycleServiceAdapter(此,
M房间);
mRooms=newarraylist();
//使用分区适配器设置ViewPager。
mView
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();
}
};
}
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();
}
List mRooms;
roomCardRecyclerViewAdapter = new RoomCardRecyclerViewAdapter(this, mRooms);
mRooms = new ArrayList<>();
mRooms = new ArrayList<>();
roomCardRecyclerViewAdapter = new RoomCardRecyclerViewAdapter(this, mRooms);