Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从firebase检索itemName并将其用于searchView?_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何从firebase检索itemName并将其用于searchView?

Java 如何从firebase检索itemName并将其用于searchView?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我尝试从Firebase检索itemName,并尝试将其用于searchView。我不知道下面代码中的逻辑出了什么问题 这是我的数据快照:- protected void onStart() { super.onStart(); databaseItems.child("items").orderByChild("itemName").addValueEventListener(new ValueEventListener() { @Override

我尝试从Firebase检索itemName,并尝试将其用于searchView。我不知道下面代码中的逻辑出了什么问题

这是我的数据快照:-

 protected void onStart() {
    super.onStart();

    databaseItems.child("items").orderByChild("itemName").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            itemFinalList.clear();
            for (DataSnapshot itemSnapShot : dataSnapshot.getChildren()) {
                ItemInventory itemInventoryTest = itemSnapShot.getValue(ItemInventory.class);

                itemFinalList.add(itemInventoryTest);

            }

            ItemList adapter = new ItemList(SearchActivity.this, itemFinalList);
            listFinal.setAdapter(adapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
和搜索视图功能

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_search, menu);
    MenuItem item = menu.findItem(R.id.menuSearch);
    SearchView searchView = (SearchView) item.getActionView();


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

        @Override
        public boolean onQueryTextChange(String newText) {
            adapter.getFilter().filter(newText);
            return false;
        }
    });
    return super.onCreateOptionsMenu(menu);
}
这是我的“itemList”类,因为它在我的datasnapshot中使用:-

public class ItemList extends ArrayAdapter<ItemInventory> {

    private Activity context;
    private List<ItemInventory> items;

    public ItemList(Activity context, List<ItemInventory> items) {
        super(context, R.layout.list_layout, items);
        this.context = context;
        this.items = items;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();

        View listViewItem = inflater.inflate(R.layout.list_layout, null, true);

        TextView textViewCategory = (TextView) listViewItem.findViewById(R.id.textViewCategory);
        TextView textViewName = (TextView) listViewItem.findViewById(R.id.textViewName);
        TextView textViewCost = (TextView) listViewItem.findViewById(R.id.textViewCost);
        final TextView textViewCount = (TextView) listViewItem.findViewById(R.id.textViewCount);

        ItemInventory itemInventoryTest = items.get(position);

        textViewCategory.setText(itemInventoryTest.getItemCategory());
        textViewName.setText(itemInventoryTest.getItemName());
        textViewCost.setText(itemInventoryTest.getItemCost());
        textViewCount.setText(itemInventoryTest.getItemCount());

        return listViewItem;

    }
}
公共类ItemList扩展了ArrayAdapter{
私人活动语境;
私人清单项目;
公共项列表(活动上下文、列表项){
超级(上下文、右布局、列表和布局、项目);
this.context=上下文;
这个项目=项目;
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
LayoutInflater充气器=上下文。getLayoutInflater();
View listViewItem=充气机。充气(R.layout.list\u布局,null,true);
TextView textViewCategory=(TextView)listViewItem.findViewById(R.id.textViewCategory);
TextView textViewName=(TextView)listViewItem.findViewById(R.id.textViewName);
TextView textViewCost=(TextView)listViewItem.findViewById(R.id.textViewCost);
最终TextView textViewCount=(TextView)listViewItem.findViewById(R.id.textViewCount);
ItemInventory ItemInventory测试=items.get(位置);
textViewCategory.setText(itemInventoryTest.getItemCategory());
textViewName.setText(itemInventoryTest.getItemName());
textViewCost.setText(itemInventoryTest.getItemCost());
textViewCount.setText(itemInventoryTest.getItemCount());
返回listViewItem;
}
}
我还可以为searchList创建一个新类,在其中更改我的数据类型。

//在类声明下执行以下操作:
 //under class declaration do this:
   private ArrayList<String> itemlists;




itemLists=new ArrayList<String>();
 databaseItems.child("items").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot itemSnapShot : dataSnapshot.getChildren()) {
            String itemname=itemSnapShot.child("itemName").getValue().toString();

            itemlists.add(itemname);
ArrayAdapter adapter = new ArrayAdapter(SearchActivity.this,android.R.layout.simple_list_item_1 itemlists);
        listFinal.setAdapter(adapter);

        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
}
私有ArrayList项目列表; ItemList=新的ArrayList(); databaseItems.child(“items”).addValueEventListener(新的ValueEventListener(){ @凌驾 公共void onDataChange(DataSnapshot DataSnapshot){ 对于(DataSnapshot itemSnapShot:DataSnapshot.getChildren()){ 字符串itemname=itemsnashot.child(“itemname”).getValue().toString(); itemlists.add(itemname); ArrayAdapter=新的ArrayAdapter(SearchActivity.this,android.R.layout.simple\u list\u item\u 1 itemlists); setAdapter(适配器); } } @凌驾 已取消的公共void(DatabaseError DatabaseError){ } }); }

尝试上面的方法,将
clear()
放在
onDataChange
之前,这就是它不起作用的原因,每次尝试检索时,您也在清除列表。将
clear()
放在前面,以避免启动活动时出现重复值。

谢谢,但是itemFinalList和itemname不是相同的类型。使用StringName类型的arraylist适配器如何?使用
ArrayAdapter
,因为您只检索
itemname
。在执行此操作之前,请尝试您的代码,但只需从中删除
clear()
,然后查看您得到了什么。我已使用“itemList”类更新了我的帖子。请看。谢谢,我试试你的建议。