2017-09-15 1 views
0

dataSnapshot을 사용하여 firebase 객체에서 double을 얻으려고 시도 할 때마다 시도 할 때마다 java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double을 말하는 오류가 발생합니다. 나는이 오류 java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long을 얻게 될 것이므로 짧은 오류는 그 반대입니다. 이것은 내가 중포 기지 dataSnapshot 내 총 얻기 위해 사용하고 코드입니다 :Firebase에서 두 번 가져 오기

mDatabaseReference.child(mAuth.getCurrentUser().getUid()).addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      if (!isPrinted) { 
       System.out.println("Children" + dataSnapshot.getChildrenCount()); 
       for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
        Double price = (Double) snapshot.child("total").getValue(); 
        System.out.println("Price: " + String.valueOf(price)); 
       } 
       isPrinted = true; 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }); 

를이 내가 중포 기지의 총 저장 사용하고 코드입니다 : 내가 찾고 있어요

double total = holder.quantity * price; 
        dataSnapshot.child(code).child("total").getRef().setValue(total); 

Double을 사용하여 firebase에서 합계를 가져 오려면 ClassCastException이 필요합니다. 해결책을 찾도록 도와주세요. 는 또한 솔루션을 here을 찾고 시도했지만 아무것도에게

이 내가에서 쿼리있어 내 FirebaseDatabase입니다 찾을 수 없습니다 : 나는 당신의 데이터베이스 스크린 샷에서 문제를 볼 수 있다고 생각 enter image description here

+0

, 내가 문제가 데이터를 검색하기 위해 노력하고있는 노드 생각 -이 : 그럼, 당신은 단지 값을 검색하려면 다음을 호출해야 '롱 (Long)'이라는 아이들과 '더블 (Double)'이라는 아이들이있다. 데이터베이스 구조를 게시하십시오. –

+0

@Rohan Stark. 방금 그걸 게시했습니다 ... – Zack

답변

2

합니다. total 노드의 값은 "5.16"입니다. 반면, 다른 total의 값은 "0"입니다 (나는 또한 당신이 "0"이라는 값을 갖는 total 노드를 더 많이 가지고 있다고 가정합니다).

그래서, "0"가 Long으로 처리되는 동안 당신은 상관없이 "5.16"가 Double로 취급되기 때문에 할 무엇 ClassCastException을 받고하지있어 - 당신은 같은 쿼리에서 모두 검색하고 있습니다.

가장 간단한 해결책은 "0"을 "0.0"으로 변경하는 것입니다. 그러면 모든 total 노드가 Double 값을 보유하게됩니다. 당신이 ClassCastException`s '의 두 종류가 있어요 때문에

Double price = (Double) snapshot.child("total").getValue(); 
+0

오늘 저축 해 주신 와우 감사합니다. – Zack

+0

좋아요! 모두 최고 –

+1

0 대신 0.0을 어떻게 저장합니까? '.setValue (0.0)'또는'.setValue (new Double (0.0)) '을 쓸 때 여전히 값이 0 인 Long으로 저장됩니다. – Jesper

관련 문제