2017-10-04 5 views
0

こんにちは私はリストビューからデータベースから一意のキーを取得しようとしていますが、私はできません!助けてください!ここでFirebaseからgetキーを取得するには?

は私のデータベースの絵である:ここで Database

は私のコード

public class Inventory extends AppCompatActivity { 
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("All Barcodes"); 

    database.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(final DataSnapshot dataSnapshot) { 
      arrayAdapter.clear(); 
      for(final 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); 
       mList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) { 

         //get position IMPT CODE 
         String myKey = mList.getItemAtPosition(i).toString(); 
         String bc = myKey.split("Barcode:")[1]; 
         bc = dataSnapshot.child(bc).getKey(); 
         Toast.makeText(Inventory.this,bc,Toast.LENGTH_SHORT).show(); 
         // Intent intent = new Intent(Inventory.this,Edit.class); 
         // intent.putExtra("value",bc); 
         // startActivity(intent); 
        } 
       }); 

      } 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 


} 

}

私はそれぞれのデータを表示するリストビューをクリックすると、それが表示されますです次のようにトーストのバーコード番号を入力します。私が欲しかったのは、トーストのそれぞれのデータのキーである "-KvaATA3zliSuv7S1RPe"を検索することでした。どんな助けでも大変感謝しています!

Screenshot of Activity

UPDATE

私は今、データのキーを取得することができています。しかし、どのデータをリストビューでクリックしても、最後のデータのキーは常に-KvaATA3zliSuv7S1RPeというJSONツリーに表示されます。どんな助けでも大歓迎です。

+0

それはあなたを助けなければならない https://stackoverflow.com/questions/38232140/how-to-get-the-key-from-the-valueこのリンクを参照してください。 -in-firebase –

答えて

1

forループ内で、dataSnapshotからsnapshotに変更してください。

for(final 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); 
      mList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) { 

        //get position IMPT CODE 
        String myKey = mList.getItemAtPosition(i).toString(); 
        String bc = myKey.split("Barcode:")[1]; 
        bc = snapshot.getKey(); // changed from dataSnapshot to snapshot 
        Toast.makeText(Inventory.this,bc,Toast.LENGTH_SHORT).show(); 
        // Intent intent = new Intent(Inventory.this,Edit.class); 
        // intent.putExtra("value",bc); 
        // startActivity(intent); 
       } 
      }); 

     } 

EDITS:

public class Inventory extends AppCompatActivity { 
    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("All Barcodes"); 

     final List<String> keys = new ArrayList<>(); // will contain list of keys corresponding to listview item 
     database.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(final DataSnapshot dataSnapshot) { 
       arrayAdapter.clear(); 
       for(final DataSnapshot snapshot : dataSnapshot.getChildren()){ 


        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(); 
        names.add("Product Name: "+name+"\nExpiry Date: "+exp+ "\nQuantity: "+q+"\nBarcode: "+ barcode); 
        keys.add(snapshot.getKey()); 


       } 
       arrayAdapter.addAll(names); 
       arrayAdapter.notifyDataSetChanged(); 

       mList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) { 


         String myKey = keys.get(i); 
         Toast.makeText(Inventory.this, myKey ,Toast.LENGTH_SHORT).show(); 
         // Intent intent = new Intent(Inventory.this,Edit.class); 
         // intent.putExtra("value",bc); 
         // startActivity(intent); 
        } 
       }); 



      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 




    } 

} 
+0

あなたのお返事ありがとうございます!リストビュー上でどのデータをクリックしても、最後のデータのキーが "-KvaATA3zliSuv7S1RPe"と表示されます。私は例、私は製品名 "犬"とlistViewをクリックして、私は、任意の手掛かりの鍵を取得したいと思いますか?ありがとうございます –

+0

編集を確認してください。あなたのコードを少しリファクタリングしました。変更があった場合、コメントを配置します。 –

+0

英雄のすべてが帽子をかぶっているわけではありません。ありがとうございます!コードは正常に動作します! –

関連する問題