читать узел базы данных в реальном времени - PullRequest
1 голос
/ 16 марта 2019

Привет, ребята. Я бы хотел в качестве заголовка прочитать один узел, созданный ранее в моей базе данных firebase в реальном времени, поэтому база данных создается:

Users
   ---- UID1
          ---- Email:
          ---- Fullname:
          ---- Phone:
          ---- Coins:
   ---- UID2
          ---- Email:
          ---- Fullname:
          ---- Phone:
          ---- Coins:

, поэтому моя база данных имеет структуру, подобную показанной, иМне нужно прочитать в onDataChange, а затем записать данные в TextView.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_page_coins_);

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("Utenti");
    myRef.child("Rapp Coins %").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String coinsRapp = dataSnapshot.getValue(String.class);
            mCoins.setText(coinsRapp);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

этот метод, который я использовал, не работает, так как я не могу заставить его взять нужные мне данные.

Мне нужно принять значение Coins: внутри каждого отдельного зарегистрированного пользователя, поэтому каждый зарегистрированный пользователь читает свои данные.

Я значение UID, которое идентифицирует каждого пользователя, я создал его на основе его мобильного номера, поэтомуУ каждого пользователя есть свой номер мобильного телефона, который идентифицирует его как UID.

Это весь мой код, так как вы можете видеть, что данные, сохраняющие UID, содержатся в mPhone, который был сохранен и затем введен в это действие черезSharedPreferences.

public class PageCoins_Activity extends AppCompatActivity implements RewardedVideoAdListener {

    private static final String TAG = MainActivity.class.getName();
    private FirebaseAuth mAuth;
    private AdView mBannerTop;
    private AdView mBannerBot;
    private RewardedVideoAd mRewardedVideoAd;
    public double Coins;
    double coinsOp = 0.00;
    double coinsCl = 0.00;
    double coinssum = 0.00;

    Button mButton;
    Button mPhonebtn;
    TextView mCoinscounter;
    TextView mCoins;
    FirebaseDatabase mDatabase;
    EditText mPhoneEdt;
    TextView mPhone;

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_page_coins_);

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("Utenti");
        myRef.child("Rapp Coins %").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String coinsRapp = dataSnapshot.getValue(String.class);
                mCoins.setText(coinsRapp);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

        mAuth = FirebaseAuth.getInstance();
        initFirebase();

        //counter CRD
        mCoinscounter = (TextView)findViewById(R.id.Textcoins);
        mButton = (Button)findViewById(R.id.btn2);
        mPhoneEdt = (EditText)findViewById(R.id.NumberPhEdt);
        mPhone = (TextView) findViewById(R.id.NumberPhTxt);
        mCoins = (TextView)findViewById(R.id.txtGen);
        mPhonebtn = (Button)findViewById(R.id.buttonPhone);

        //mPhoneEdt.setVisibility(View.GONE);
        //mPhone.setVisibility(View.VISIBLE);

        findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mRewardedVideoAd.isLoaded()) {
                    mRewardedVideoAd.show();
                }

                // Write a message to the database
                DatabaseReference myRef = mDatabase.getReference();
                myRef.child("Utenti").child(mPhone.getText().toString()).child("Rapp Coins Day %").setValue(mCoinscounter.getText().toString());
            }
        });

        mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(this);
        mRewardedVideoAd.setRewardedVideoAdListener(this);

        //Set Orientation Portrait
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        // Banner Top View Coins
        mBannerTop = (AdView) findViewById(R.id.adViewTopcoins);
        AdRequest adRequest = new AdRequest.Builder().setRequestAgent("android_studio:ad_template").build();
        mBannerTop.loadAd(adRequest);

        // Banner Bot View Coins
        mBannerBot = (AdView) findViewById(R.id.adViewBotcoins);
        AdRequest adRequest1 = new AdRequest.Builder().setRequestAgent("android_studio:ad_template").build();
        mBannerBot.loadAd(adRequest1);

        getnumberprefs();

        //ADMob Video
        loadRewardedVideoAd();
    }

    private void getnumberprefs() {
        SharedPreferences numb = getSharedPreferences(Register_Activity.NUMB, MODE_PRIVATE);
        String numberphn = numb.getString(Register_Activity.KEY_NUMB,null);
        mPhone.setText(numberphn);
    }

    //boolean changepgcoins = true;

    public void changeNumber(View view) {

        /*if (changepgcoins == true){
            mPhoneEdt.setVisibility(View.GONE);
            mPhone.setVisibility(View.VISIBLE);
            changepgcoins = false;
        }else{
            mPhoneEdt.setVisibility(View.VISIBLE);
            mPhone.setVisibility(View.GONE);
            changepgcoins = true;
        }*/

    }

    private void initFirebase() {
        mDatabase = FirebaseDatabase.getInstance();
    }

    public void HomeClick(View view){
        Intent intenthome = new Intent(this, MainActivity.class);
        finish();
        startActivity(intenthome);
    }

    public void displayCrd (double amount){
        mCoinscounter.setText(String.format("%.2f", amount));
    }

    private void loadRewardedVideoAd() {
        mRewardedVideoAd.loadAd("ca-app-pub-3940256099942544/5224354917",
                new AdRequest.Builder().build());
    }

    public void logout(View view) {
        mAuth.signOut();
        updateUI();
    }

    private void updateUI() {
        FirebaseUser currentuser = mAuth.getCurrentUser();
        if(currentuser == null){
            Intent intTologin = new Intent(this, Login_Activity.class);
            finish();
            startActivity(intTologin);
        }
    }

    @Override
    public void onRewardedVideoAdLoaded() {
        Log.d(TAG, "Video Caricato");

    }

    @Override
    public void onRewardedVideoAdOpened() {

    }

    @Override
    public void onRewardedVideoStarted() {

    }

    @Override
    public void onRewardedVideoAdClosed() {
        loadRewardedVideoAd();
    }

    @Override
    public void onRewarded(RewardItem rewardItem) {
        Toast.makeText(this, " RAPp " + " COINS " + " : " + rewardItem.getAmount(), Toast.LENGTH_LONG).show();
        Coins += rewardItem.getAmount();
        displayCrd(Coins/40200*100);
    }

    @Override
    public void onRewardedVideoAdLeftApplication() {

    }

    @Override
    public void onRewardedVideoAdFailedToLoad(int i) {
        Log.d(TAG, "Caricamento Fallito");
    }

    @Override
    public void onRewardedVideoCompleted() {
        loadRewardedVideoAd();
    }

    @Override
    protected void onDestroy() {

        if (!isEmpty(mCoins)){

            String coinsopen = mCoins.getText().toString();
            String coinscounter = mCoinscounter.getText().toString();

            coinsOp = Double.parseDouble(String.format(coinsopen.replace(',', '.'), "%.2f"));
            coinsCl = Double.parseDouble(String.format(coinscounter.replace(',', '.'), "%.2f"));

            coinssum = (coinsOp + coinsCl);

            mCoinscounter.setText(String.valueOf(coinssum));

            // Write a message to the database
            DatabaseReference myRef = mDatabase.getReference();
            myRef.child("Utenti").child(mPhone.getText().toString()).child("Rapp Coins %").setValue(mCoinscounter.getText().toString());


        }else{

            // Write a message to the database
            DatabaseReference myRef = mDatabase.getReference();
            myRef.child("Utenti").child(mPhone.getText().toString()).child("Rapp Coins %").setValue(mCoinscounter.getText().toString());
        }

        super.onDestroy();
    }

    private boolean isEmpty(TextView mCoins) {
        String input = mCoins.getText().toString();
        return input.length() == 0.00;
    }

}

Я действительно прошу помощи в решении этой проблемы, потому что это последнее, что мне нужно закончить, и я не могу отблагодарить вас.

{
      "Utenti" : {
        "3********4" : {
          "E-Mail" : "",
          "Full Name" : "",
          "Phone" : "",
          "Rapp Coins %" : "",
          "Rapp Coins Day %" : ""
        },
        "3********1" : {
          "E-Mail" : "",
          "Full Name" : "",
          "Phone" : "",
          "Rapp Coins %" : "",
          "Rapp Coins Day %" : ""
        },
       }
    }

это моя база данных, составленная так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...