2016-08-04 4 views
3

파이어베이스를 사용하여 Java에서 값을 고정 시키려고했는데 전역 변수를 업데이트하지 않습니다. onStart에서 EventListener를 호출하면 변수 (60)의 올바른 값을 성공적으로 표시합니다. 내가 10을 늘려야 할 때 - 버튼 클릭으로 - 그것은 나에게 0안드로이드 : 파이어베이스 번호 증가

long value; 

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

    final TextView mValue = (TextView) findViewById(R.id.some_textview); 

    mRef = new Firebase(some_correct_url); 
    mRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      value = (long) dataSnapshot.getValue(); 
      mValue.setText(value+""); 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }); 
} 

를 표시하고 버튼을 클릭하면 다음과 같은 기능은 그래서 전부를

public void addTen(View view) { 
    mRef = new Firebase(my_private_url); 
    mRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      value =(long) dataSnapshot.getValue(); 
      value = value + 10; 
     } 
     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
     } 
    }); 

    mRef.setValue(value); 

} 

를 호출되고 첫 번째 부분은 변수의 올바른 값을 검색하지만 두 번째 부분은 올바른 값을 증가시키지 않습니다. 미리 감사드립니다!

편집 : 그런데 나는 다음과 같은 중포 기지-규칙을 설정 :

{ 
"rules": { 
".read": "true", 
".write": "true" 
} 
} 

이 개발 시간입니다.

+0

무슨 뜻입니까 ** 증가하지 않습니다 ** 로그에 U 값을 인쇄했거나 UI에 값을 업데이트 했습니까? – Kathi

+0

예 값을 디버깅 중이었고 첫 번째 부분 인 onStart에서 올바르게 표시되지만 두 번째 부분에서는 addTen 함수에서 전역 초기화가 0 인 값을 사용합니다. – Michael

+0

잘못된 값으로 시작하지만 증가합니다. 0부터 시작하지만 60에서 시작해야합니다 (firebase의 값) – Michael

답변

3

Firebase 리스너가 비동기 적으로 실행됩니다. 청취자가 해고되고 value을 업데이트하기 전에 mRef.setValue(value)에 대한 호출이 실행됩니다. 다음과 같이 코드를 변경합니다

public void addTen(View view) { 
    mRef = new Firebase(my_private_url); 
    mRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      value =(long) dataSnapshot.getValue(); 
      value = value + 10; 
      dataSnapshot.getRef().setValue(value); 
     } 
     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
     } 
    }); 
} 

addListenerForSingleValueEvent() 그게 addValueEventListener()를 교체했다. addten()가 호출 될 때마다 청취자를 쌓아두기를 원하지 않는다고 생각합니다.

+0

여전히 시작됩니다. 0에서 증가하지만, 당신이 무엇을 의미하는지 알 것입니다. – Michael

+0

@ MichaelJancen-Widmer : 귀하의 글을 위해 실제 URL을'some_correct_url'과'my_private_url'로 바꿨습니다. 실제 URL이 동일합니까? –

+0

그렇습니다. 이것은 프라이버시만을위한 것입니다. – Michael