2017-12-01 5 views
0

FirestoreRecyclerAdapter를 사용 중이며 문제가 있습니다.FirestoreRecyclerAdapter가 뷰를 업데이트하지 않습니다.

   Query query = db 
       .collection(SOME_COLLECTION) 
       .whereEqualTo("key", key)      
       .orderBy("dueDate"); 

orderBy를 입력하면 데이터가 처음으로로드됩니다. 실시간 업데이트가 작동하지 않습니다. 나는 주문 필드를 변경하는 것뿐만 아니라 끝에 orderBy를 넣으려고했다.

orderBy를 제거하면 모두 정상적으로 작동합니다. 그러나 주문은 없습니다.

설명서에 따르면 범위 비교를 사용하지 않을 경우 작동해야합니다. 어떤 아이디어?

업데이트 됨. 다음은 어댑터 옵션입니다.

   FirestoreRecyclerOptions<Payment> options = 
      new FirestoreRecyclerOptions.Builder<Payment>() 
      .setQuery(query, Payment.class) 
      .build(); 

여기는 결제 방법입니다.

public class Payment { 

private String key; 
private double amount; 
private Date cDate; 
private Date paidDate; 
private Date dueDate; 
private boolean isPaid; 

public Payment() { 
} 

Payment(String key, double amount, Date cDate, Date paidDate, Date dueDate, boolean isPaid) { 
    this.key = key; 
    this.amount = amount; 
    this.cDate = cDate; 
    this.paidDate = paidDate; 
    this.dueDate = dueDate; 
    this.isPaid = isPaid; 
    } 
} 

여기는 지불 홀더입니다.

class PaymentHolder extends RecyclerView.ViewHolder { 

private TextView pDate, pAmount; 
private CheckBox pDone; 

PaymentHolder(View itemView) { 
    super(itemView); 

    pDate = itemView.findViewById(R.id.pDate); 
    pAmount = itemView.findViewById(R.id.pAmount); 
    pDone = itemView.findViewById(R.id.checkBox); 


}} 

여기 어댑터가 있습니다.

firestoreRecyclerAdapter = new FirestoreRecyclerAdapter<Payment, PaymentHolder>(options) { 


     @Override 
     protected void onBindViewHolder(final PaymentHolder paymentHolder, final int position, final Payment payment) { 

      final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM); 

      final String id = getSnapshots().getSnapshot(position).getId(); 

      paymentHolder.getpDate().setText(dateFormat.format(payment.getDueDate())); 
      paymentHolder.getpAmount().setText(getAmount(payment.getAmount())); 
      paymentHolder.getpDone().setChecked(payment.isPaid()); 


     } 


     @Override 
     public PaymentHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 

      View view = LayoutInflater.from(viewGroup.getContext()) 
        .inflate(R.layout.payment_item, viewGroup, false); 

      final PaymentHolder paymentHolder = new PaymentHolder(view); 

      return paymentHolder; 
     } 
    }; 

    recyclerView.setAdapter(firestoreRecyclerAdapter); 

모든 설정은 예제가 아니라 공상입니다.

+0

공유 한 코드는'FirestoreRecyclerAdapter'에서 아무 것도하지 않습니다. 문제를 재현하는 [** 최소 ** 완전한 ** 코드] (http://stackoverflow.com/help/mcve)를 보지 않으면 무엇이 잘못 될지 말하기가 어렵습니다 (링크를 읽으면 매우 유용합니다). –

+0

해당 필드 조합에 대해 인덱스가 정의되어 있습니까? 그렇지 않다면, 당신은 logcat에 대해 꽤 명백한 경고를 얻어야합니다. –

답변

1

Frank가 말했듯이 색인을 만들어야합니다. 로그를보다 정확하게 보면, 색인 작성 링크와 경고가 있습니다. 그냥 링크를 클릭하면됩니다. 빅 브라더가 당신을 위해 올바른 색인을 만듭니다. 프랭크 고마워.