2017-06-20 31 views
0

我想爲預訂做一個應用程序。我需要在其他節點中查找一些數據,然後將其存儲在一個變量中,並在其他節點處插入一個新的數據輸入。這是我想要的數據結構:在firebase數據庫中獲取一個值並將其保存在一個變量中:android

{ 
"laundry_category" : { 
    "laundry_category1" : { 
     "name" : "clean laundry", 
     "description" : "xxxxxxx" 
    } 
}, 

"laundry" : { 
    "laundry_category1" : { 
     "laundry_id_1" : { 
     "name" : "ABC", 
     "colour" : "red", 
     "description" : "xxxxx" 
    } 
} 
} 

例如,我想從衣物分類節點獲取數據描述並將其插入到節點洗衣店。可能嗎? 我已經在我的代碼中嘗試過,但它不起作用。這是我的addLaundry.java代碼:

addLaundry.java

DatabaseReference databaseLaundry; 
DatabaseReference databaseCategory; 

List<Laundry> laundryList; 

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

    databaseLaundry.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      laundryList.clear(); 

      for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
       Laundry laundry = postSnapshot.getValue(Laundry.class); 
       laundryList.add(laundry); 
      } 



      LaundryList adapter = new LaundryList(TambahLaundryActivity.this, laundryList); 
      listViewLaundry.setAdapter(adapter); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add_laundry); 


    btAddLaundry = (Button)findViewById(R.id.bn_add_laundry); 
    listViewLaundry = (ListView)findViewById(R.id.listViewLaundryLis); 

    laundryList = new ArrayList<>(); 


    Intent intentAddLaundry = getIntent(); 

    String id_category = intentAddLaundry.getStringExtra(MainActivity.category_id); 
    String description_category = intentTambahLaundry.getStringExtra(MainActivity.category_description); 

    databaseLaundry = FirebaseDatabase.getInstance().getReference("laundry").child(id_category); 

    databaseLaundry = FirebaseDatabase.getInstance().getReference("laundry").child(description_category); 

    btAddLaundry.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      addLaundry(); 
     } 
    }); 


} 

public void addLaundry() { 
    databaseLaundry.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
       category a = postSnapshot.getValue(category.class); 
       String var_category_description = ((Map)a).get("category_description").toString(); 

       String id = databaseLaundry.push().getKey(); 
       Laundry laundry = new Laundry(id, name_laundry, var_category_description); 
       databaseLaundry.child(id).setValue(laundry); 
      } 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
    } 
} 

Laundry.java

public class Laundry { 
    private String laundry_id; 
    private String laundry_nama; 
    private String laundry_alamat; 
    private String kategori_nama; 

public Laundry() { 

} 

public Laundry(String laundry_id, String laundry_name, String category_description { 
    this.laundry_id = laundry_id; 
    this.laundry_nama = laundry_nama; 
    this.category_description = category_description; 
} 

public String getLaundry_id() { 
    return laundry_id; 
} 

public String getLaundry_name() { 
    return laundry_name; 
} 

public String getLaundry_alamat() { 
    return laundry_alamat; 
} 

public String getCategory_description() { 
    return category_description; 
    } 
} 

category.java

public class Category { 
private String category_id; 
private String category_name; 
private String category_description; 

public Category() { 

} 

public Category(String category_id, String category_name, category_description) { 
    this.category_id = category_id; 
    this.category_name = category_name; 
    this.category_description = category_description; 

} 

public String getcategory_id() { 
    return category_id; 
} 

public String getcategory_name() { 
    return category_name; 
} 

public String getcategory_description() { 
    return category_description; 
} 

三江源這麼多的幫助:)

+1

您初始化'databaseLaundry'兩次,這似乎是一個錯誤。但是請注意,Stack Overflow通常是調試器的糟糕替代品。如果您將問題分成單獨的代碼片段而無需外部依賴關係,那麼最簡單的方法是幫助解決問題,例如使用硬編碼字符串代替從用戶輸入中讀取的「description_category」。這種單獨的片段被稱爲[MCVE](http://stackoverflow.com/help/mcve),是我們幫助您的最簡單方式。 –

回答

0

如果您希望將相同的數據保存在多個位置上,當您上傳數據時,您需要在每個DatabaseReference對象上做相同的事情。因此,爲了實現這一點,請使用此兩個引用:

DatabaseReference idCateoryRef = FirebaseDatabase.getInstance().getReference("laundry").child(id_category); 

DatabaseReference descriptionCategoryRef = FirebaseDatabase.getInstance().getReference("laundry").child(description_category); 

在你的代碼中的錯誤是,你初始化同DatabaseReference兩次。如上所述,您需要針對每項操作有不同的DatabaseReference

希望它有幫助。

相關問題