我是android studio的初学者!当我点击相应的列表视图时,我正试图从谷歌firebase检索密钥(也称为我的应用程序的条形码)。我想检索各自的密钥,并面临一个无法解决方法错误。例如。我点击第一个ListView和pname:" dick",我想只检索密钥(条形码),97,这样我就可以将密钥传递给另一个java活动,这样我就可以检索其他活动中的其他数据。希望我没有弄错逻辑
这是我的数据库的照片:
我尝试过许多不同的代码,例如: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) {
}
});
}
答案 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 documentation,getRef()
不接受任何争论。