2017-04-07 98 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()'方法生成的唯一键来代替您的键?这些键默认按升序排列。 –

相关问题