2016-08-04 6 views
3

Firebaseを使ってJavaで値を変更したところ、グローバル変数は更新されません。 onStartでEventListenerを呼び出すと、変数(60)の正しい値が正常に表示されます。そして、私は10で、それを増やしたいとき - ボタンのクリックで - それは私0Android:Firebase番号のインクリメント

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); 

} 

と呼ばれているが表示されます最初の部分は変数の正しい値を取得しますが、2番目の部分は正しい値を増やしません。前もって感謝します!

編集:ところで、私は、次のようFirebase-ルールを設定します。

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

これは、開発時間のためです。

+0

何を意味する**増加しない** UIにログまたは更新値を印刷したか? – Kathi

+0

はい私はその値をデバッグしていましたが、最初の部分ではonStartでは正しく表示されていましたが、addTen関数の2番目の部分では0の値を持つグローバル初期化が行われます – Michael

+0

間違った値から始まります。それはゼロから始まりますが、それは60で始まります(firebaseからの値) – Michael

答えて

3

Firebaseリスナーは非同期で起動します。リスナーが起動する前にmRef.setValue(value)への呼び出しが実行され、valueが更新されました。 addListenerForSingleValueEvent()addValueEventListener()を置き換えること

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) { 
     } 
    }); 
} 

注:あなたのコードは次のように変更します。 addten()が呼び出されるたびにリスナーを積み重ねたいとは思わない。

+0

それはまだ始まります増分は0ですが、私はあなたが何を意味するのかを見ています。 – Michael

+0

@ MichaelJancen-Widmer:投稿のために、実際のURLを 'some_correct_url'と' my_private_url'に置き換えました。実際のURLが同一であることを確認してください。 –

+0

はい、これはプライバシーのためのものです – Michael

関連する問題