Значение Sharedprefferences обновляется при изменении значения в Firebase - PullRequest
0 голосов
/ 05 июля 2019

Я хочу понять связь Firebase с PreferenceManager.У меня 4 активность.Вход в систему, регистрация, основная активность и вторая активность.

Когда пользователь регистрируется, его электронная почта, телефон сохраняются в Firebase, а также в PreferenceManager или у пользователя с учетной записью при входе в систему. Я извлекаю данные из Firebase и сохраняю в PreferenceManager.

В следующий раз, когда пользователь откроет приложение, если он вошел в систему, ему будет показано Mainacctivity с одной кнопкой, чтобы перейти на SecondActivity, где я отображаю значение PreferenceManager, которое я сохранил ранее.

Когда я нажимаю кнопку иВторое действие Открывается и отображаются значения.Но когда я нажимаю кнопку «Назад» и делаю какие-либо изменения в значении моего firebase ... Теперь, когда я нажимаю кнопку, и второе действие открывается с новым измененным значением.

Я хочу знать, синхронизирует ли firebase значения SharedPreferences или неткак я мог найти любую документацию по relatd.

Вот мой код

Моя учетная запись

private class t2 extends AsyncTask<String,String,Boolean> {

        @Override
        protected Boolean doInBackground(final String... strings) {

            String k = (strings[0]).replace('@','_');
            k = k.replace('.','_');
            Log.e("string[0] = ",k);
            dbreference.child("users").child(k).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    String p = dataSnapshot.child("userPhoneno").getValue(String.class);
                    String n = dataSnapshot.child("userName").getValue(String.class);
                    String u = dataSnapshot.child("userUniversity").getValue(String.class);
                    String e = loginid.getText().toString();

                    PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("phone",p).apply();
                    PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putString("email",e).apply();
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            });
            publishProgress(strings[0]);
            return null;
        }
        @Override
        protected void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);
            Intent i1 = new Intent(Login.this,MainActivity.class);

            i1.putExtra("showmail",fauth.getCurrentUser().getEmail());
            startActivity(i1);
            finish();
        }
    }

Моя основная активность

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start);
    Button_One = (Button) findViewById(R.id.button);


    Button_One.setOnClickListener(this);

}

@Override
public void onClick(View arg0) {
    // TODO Auto-generated method stub

    switch (arg0.getId()) {

        case R.id.button:       
            startActivity(new Intent(this,SecondActivity.class));
            break;

    }
}

Во втором действии

etEmail = (EditText) findViewById(R.id.user_email);
etMobile = (EditText) findViewById(R.id.user_mobile);
 class t3 extends AsyncTask<String,Integer,Boolean>{

        @Override
        protected Boolean doInBackground(String... strings) {
            publishProgress();
            return null;
        }
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);


            etEmail.setText(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("email","Default email"));
            etMobile.setText(String.valueOf(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("phone","Default phone")));
        }
    }

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

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

0 голосов
/ 05 июля 2019

Вкратце: Firebase не имеет ничего общего с вашими локальными предпочтениями.

Почему ваши предпочтения были изменены именно из-за этого

dbreference.child("users").child(k).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                   ....
                }
}

Вы сохраняете свои данные в настройках в onDataChange(){} block.

onDataChange означает каждый раз, когда firebaseDB изменяется .

Поэтому, независимо от того, где вы измените свою базу данных (даже с веб-сайта), ваш преф будет обновляться, еслиактивность еще жива.

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