Android Firebase无法从listview解析方法getRef(position)

时间:2017-10-02 10:35:28

标签: android firebase firebase-realtime-database

我是android studio的初学者!当我点击相应的列表视图时,我正试图从谷歌firebase检索密钥(也称为我的应用程序的条形码)。我想检索各自的密钥,并面临一个无法解决方法错误。例如。我点击第一个ListView和pname:" dick",我想只检索密钥(条形码),97,这样我就可以将密钥传递给另一个java活动,这样我就可以检索其他活动中的其他数据。希望我没有弄错逻辑

这是我的数据库的照片:

enter image description here

我尝试过许多不同的代码,例如:Android Firebase cannot resolve method getRef(position)。 任何帮助将不胜感激!提前致谢

private Button AddProduct;
private DatabaseReference database;
private ListView mList;
private ArrayList<String> names = new ArrayList<>();
private ArrayList<String> keys = new ArrayList<>();
ArrayAdapter<String> arrayAdapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_inventory);
    AddProduct = (Button) findViewById(R.id.AddProduct);


    AddProduct.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(Inventory.this, AddProduct.class));
        }
    });

    mList = (ListView) findViewById(R.id.listView2);

    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names);
    mList.setAdapter(arrayAdapter);
    database = FirebaseDatabase.getInstance().getReference();
    mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
           String value = (String) mList.getItemAtPosition(i);
            //Toast.makeText(Inventory.this,value,Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(Inventory.this,Edit.class);
            intent.putExtra("fk",value);
            startActivity(intent);
        }
    });

    database.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            arrayAdapter.clear();
            for(DataSnapshot snapshot : dataSnapshot.getChildren()){

                arrayAdapter.notifyDataSetChanged();
                String barcode = (String) snapshot.child("barcode").getValue();
                String name = (String) snapshot.child("pname").getValue();
                String exp = (String) snapshot.child("expiration").getValue();
                String q = (String) snapshot.child("quantity").getValue();
                arrayAdapter.add("Product Name: "+name+"\nExpiry Date: "+exp+ "\nQuantity: "+q+"\nBarcode: "+ barcode);
            }

        }

        @Override
        public void onChildChanged(final DataSnapshot dataSnapshot, String s) {
            String value = dataSnapshot.getValue(String.class);
            String key = dataSnapshot.getKey();

            int index = keys.indexOf(key);

            names.set(index, value);

            arrayAdapter.notifyDataSetChanged();

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

更新:我尝试使用如下所示的任一代码,但两个节目都无法解决方法错误!任何帮助将不胜感激。以下是我试过的代码,但无济于事 enter image description here

3 个答案:

答案 0 :(得分:1)

要解决此问题,您需要使用以下代码行:

String value = (String) adapterView.getItemAtPosition(position);

要在其他活动中使用该值,您可以使用Intent,如下所示:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("value", value);
startActivity(intent);

答案 1 :(得分:0)

要从Firebase数据库获取密钥,您应该替换此代码

    String key = dataSnapshot.getKey();

并将其替换为以下内容:

    Object key= dataSnapshot.getKey();
    String myKey = key.toString()

在android中你需要指定一个对象,它将从firebase中选择你需要使用toString()方法转换的键,以便在android中使用它!

答案 2 :(得分:0)

您收到此错误是因为this引用了OnItemClickListener而不是DatabaseReference

database.getRef().getKey()代替this.getRef().getKey()应该有用。

此外,您可能需要查看API documentationgetRef()不接受任何争论。