2017-04-07 100 views
3

我有一個Firebase數據庫中的產品列表。我的SKU看起來像這樣c08p10。但問題是,第十種產品之後會顯示百種產品。如何按升序對Firebase鍵進行排序?

請參考截圖瞭解混亂的產品訂單。

enter image description here

我可以理解,產品按字母順序排列。但是,我怎麼能在下面的順序

c08p10 
c08p11 
c08p12 

注意

展示的產品我可以在列表視圖或回收查看填充數據。但產品按照Firebase DB順序排列。如果我嘗試顛倒這個順序。它給出了下面的結構。

c08p118 
c08p117 
c08p116 
+0

請參閱此鏈接!(請參閱此鏈接(http://stackoverflow.com/questions/40198291/how-to-sort-by-children-key-value-in-firebase) – AlwaysConfused

回答

2

Firebase密鑰是字符串。當你訂購字符串數據時,它按照字典順序排列。

因此,對於數字,這是正常的順序:

但對於字符串,這是正常的順序:

  • 「1」
  • 「11」
  • 「19」
  • 「9」

有一個在火力地堡沒有操作員(也沒有在大多數其他數據庫)來改變此行爲。相反,你將不得不修改數據以獲得你想要的行爲。因此:按照字典順序排列時,按您需要的順序存儲值。對於數字可以完成,通過用零填充它們:

  • 「001」
  • 「009」
  • 「011」
  • 「019」

或者在你的情況c09p010等等

0

如果你想在你需要使用一個ArrayListArrayAdapter一個ListView顯示此產品。爲了降序排列,您必須按以下方式對ArrayList中的元素進行排序:Collections.sort(arrayList, Collections.reverseOrder());然後,可以像這樣設置da適配器:listView.setAdapter(arrayAdapter);。這裏是一個例子。

listView = (ListView) findViewById(R.id.list_view); 
arrayList = new ArrayList<>(); 
ValueEventListener eventListener = new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    @SuppressWarnings("unchecked") 
    Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue(); 
    String productName = (String) map.get("productName"); 
    arrayList.add(productName); 
    Collections.sort(arrayList, Collections.reverseOrder()); 

    arrayAdapter = new ArrayAdapter<>(this, R.layout.list, arrayList); 
    listView.setAdapter(arrayAdapter); 
} 

@Override 
public void onCancelled(DatabaseError databaseError) {} 
}; 
yourRef.addListenerForSingleValueEvent(eventListener); 

希望它有幫助。

+0

請閱讀註釋! – user3467240

+0

您是否嘗試過使用「push()'方法生成的唯一鍵來代替您的鍵?這些鍵默認按升序排列。 –

相關問題