2017-02-03 122 views
0

我正在製作投票應用程序。有兩個按鈕,點擊次數存儲在Firebase數據庫中。但是,在關閉應用程序(終止應用程序進程)時,數據庫會刷新,並且計數器會再次從零開始。即使在應用程序被終止之後,數據庫是否有可能從其離開的位置開始計數。持久的Firebase數據庫

爲MainActivity.java

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

計數器和C1的源代碼中的局部變量,你是不是堅持他們。當你存儲的計數器和計數器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) { 

     } 
    }); 

這聽起來像你正在使用火力地堡的順序版本增加它。請參考此鏈接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實例中的信息。它在那裏。

一旦您檢索到該值,將其分配給計數器或counter1變量。所以每次你啓動應用程序時,你都會將選票的價值更新回你的變量。你已經在按鈕點擊做counter ++,所以應該按原樣運行。

+0

我得到無法解決方法'getValue()'錯誤。如何解決這個錯誤? – Abhi

+0

檢查我編輯的答案。 –

+0

請解釋在onDataChange中放置什麼,以便讀取子內的值,並在點擊按鈕時進行增加和增加。 – Abhi