2017-02-03 21 views
0

私は投票アプリを作っています。 2つのボタンがあり、クリック数はFirebaseデータベースに保存されています。しかし、アプリケーションを終了すると(アプリプロセスを強制終了)、データベースがリフレッシュされ、カウンタは再びゼロから開始されます。それは、データベースがアプリが殺された後も残っていた場所から数え始められる可能性はありますか? MainActivity.java永続的なFirebaseデータベース

public class Main2Activity extends AppCompatActivity { 
private Firebase mRootRef; 
private Button mBtn1; 
private Button mBtn2; 
int counter = 0; 
int counter1 = 0; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 
    Firebase.setAndroidContext(this); 
    mBtn1 = (Button) findViewById(R.id.btn1); 
    mBtn2 = (Button) findViewById(R.id.btn2); 
    mBtn1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (v.equals(mBtn1)) { 
       mRootRef = new Firebase("https://voting-cf0fa.firebaseio.com/House/Jupiter/Player 1"); 
       Firebase mRefChild = mRootRef.child("Votes"); 
       counter++; 
       mRefChild.setValue(counter); 
       MediaPlayer click1 =MediaPlayer.create(getApplicationContext(), R.raw.click); 
       click1.start(); 
       mBtn1.setEnabled(false); 
       mBtn2.setEnabled(false); 
       Timer buttonTimer = new Timer(); 
       buttonTimer.schedule(new TimerTask() { 

        @Override 
        public void run() { 
         runOnUiThread(new Runnable() { 

          @Override 
          public void run() { 
           mBtn1.setEnabled(true); 
           mBtn2.setEnabled(true); 
          } 
         }); 
        } 
       }, 5000); 
       final AlertDialog.Builder Voted = new AlertDialog.Builder(Main2Activity.this); 
       Voted.setTitle("Voted"); 
       Voted.setMessage("You have cast Your Vote!"); 
       Voted.setCancelable(false); 
       final AlertDialog dlg = Voted.create(); 
       dlg.show(); 

       final Timer t = new Timer(); 
       t.schedule(new TimerTask() { 
        @Override 
        public void run() { 
         dlg.dismiss(); 
         t.cancel(); 
        } 
       }, 5000); 
      } 

     } 
    }); 


    mBtn2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mRootRef = new Firebase("https://voting-cf0fa.firebaseio.com/House/Jupiter/Player 2"); 
      if (v.equals(mBtn2)) { 
       Firebase mRefChild = mRootRef.child("Votes"); 
       counter1++; 
       mRefChild.setValue(counter1); 
       MediaPlayer click2 =MediaPlayer.create(getApplicationContext(), R.raw.click); 
       click2.start(); 
       mBtn2.setEnabled(false); 
       mBtn1.setEnabled(false); 
       Timer buttonTimer = new Timer(); 
       buttonTimer.schedule(new TimerTask() { 

        @Override 
        public void run() { 
         runOnUiThread(new Runnable() { 

          @Override 
          public void run() { 
           mBtn2.setEnabled(true); 
           mBtn1.setEnabled(true); 
          } 
         }); 
        } 
       }, 5000); 
       final AlertDialog.Builder Voted = new AlertDialog.Builder(Main2Activity.this); 
       Voted.setTitle("Voted"); 
       Voted.setMessage("You Have cast your Vote"); 
       Voted.setCancelable(false); 
       final AlertDialog dlg = Voted.create(); 
       dlg.show(); 

       final Timer t = new Timer(); 
       t.schedule(new TimerTask() { 
        @Override 
        public void run() { 
         dlg.dismiss(); 
         t.cancel(); 
        } 
       }, 5000); 

      } 
      } 
     }); 
    } 
@Override 
public void onBackPressed() { } 

} 

おかげ

+0

コードを投稿するか、不完全な質問を投稿するために投票します! – OBX

+0

@OBXソースコードが掲載されました! – Abhi

+0

Firebaseから現在の投票数を取得し、カウンター変数をそれに設定する必要があります。あなたのボタンのコールバックに 'OnClickListener'を設定して、それが取得される前にデータを上書きしないようにします。 –

答えて

1

カウンタとカウンタのための

ソースコードは、ローカル変数であり、あなたはそれらを永続化されていません。データベースにカウンタとカウンタの値を格納しているとして、あなたは、単に値を取得し、1

mRefChild.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      // you can retrieve your stored value from dataSnapshot 
      Object data = dataSnapshot.getValue() 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

ことによってそれをインクリメントする必要がありますが、Firebaseの順序バージョンを使用しているように聞こえます。このリンクhttps://firebase.google.com/support/guides/firebase-androidを参照してプロジェクトをアップグレードしてください。

上記のリンクも、データの読み取りに関する詳細を示します。あなたの場合、addListenerForSingleValueEvent(..)はあなたの問題を解決します。

https://www.firebase.com/docs/java-api/javadoc/com/firebase/client/DataSnapshot.html

あなたのコードからあなたが直接投票のための値を格納するようにそれが鳴り、何のテーブル構造や何でもありません。したがって、dataSnapshot.getValue()は値を返します。ただし、コードをデバッグし、ブレークポイントObject data = dataSnapshot.getValue()を配置し、dataSnapshotインスタンスの情報を分析することをお勧めします。そのすべてがそこにある。

一度値を取得したら、それをcounterまたはcounter1変数に割り当てます。あなたがアプリを起動するたびに、投票の価値をあなたの変数に更新します。ボタンのクリックでcounter ++をやっているのでそのまま動作するはずです。

+0

私getメソッド( 'getValue()'エラーを解決できません。このエラーを解決するには? – Abhi

+0

私の編集した答えをチェックしてください。 –

+0

子の中の値を読み込み、ボタンをクリックしたときに増分するように、onDataChangeの中に入れるものを説明してください。 – Abhi

関連する問題