Сохранение значения в общих настройках в классе обслуживания FirebaseInstanceIDService - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь сохранить тип пользовательской строки в Shared Preferences в Activity, но когда я пытаюсь getString из Shared Preferences в классе обслуживания, в этом случае myFirebaseInstanceIDService продолжает выдавать мне ошибку Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference.

Вот где я ставлю значение

btNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(RegisterTutorActivity.this, ChooseSub.class));
            SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
            sharedPref.edit().putString("Type", "Tutor").apply();
            signUpTutor();
        }
    });

и в myFirebaseInstanceIDService

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private FirebaseAuth mAuth = FirebaseAuth.getInstance();

private String type;
SharedPreferences sharedPref;

@Override
public void onTokenRefresh() {
    super.onTokenRefresh();
    if(mAuth.getCurrentUser() != null)
    {

        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refreshed token: " + refreshedToken);
        sendRegistrationToServer(refreshedToken);
    }
}

public void sendRegistrationToServer(String refreshedToken)
{
    sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
    type = sharedPref.getString("Type", "");
    FirebaseDatabase.getInstance().getReference().child("Users").child(type).child(mAuth.getCurrentUser().getUid())
            .child("tokenID").setValue(refreshedToken);
}
}

Не знаю, что я делаю не так с общими настройками?

Ответы [ 4 ]

0 голосов
/ 05 сентября 2018

Хорошо. Итак, я разобрался в своей проблеме, спасибо всем. Я создал класс MyApplication, расширяющий Application, и создал метод getContext. И теперь это работает. Спасибо за помощь.

0 голосов
/ 05 сентября 2018

Токен можно хранить в общих настройках, пока приложение не будет готово к его использованию:

SharedPreferences sharedPref = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.edit().putString("Type", "Tutor");     
editor.commit();
signUpTutor();

Вы можете запросить токен следующим образом:

SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("Type", Context.MODE_PRIVATE);
      String  type = sharedPref.getString("Type", null);
0 голосов
/ 05 сентября 2018

Я создал класс для упрощения SharedPreferences операций. Я делюсь этим здесь, надеюсь, это поможет вам.

public class PreferenceUtils {

    private SharedPreferences pref;
    private SharedPreferences.Editor editor;

    public PreferenceUtils(Context context) {
        pref = PreferenceManager.getDefaultSharedPreferences(context);
    }

    public void setPrefrences(String key, String value) {
        editor = pref.edit();
        editor.putString(key, value);
        editor.apply();
    }

    public void setPrefrences(String key, int value) {
        editor = pref.edit();
        editor.putInt(key, value);
        editor.apply();
    }

    public void setPrefrences(String key, boolean value) {
        editor = pref.edit();
        editor.putBoolean(key, value);
        editor.apply();
    }

    public String getPrefrence(String key, String Default) {
        return pref.getString(key, Default);
    }

    public int getPrefrence(String key, int Default) {
        return pref.getInt(key, Default);
    }

    public boolean getPrefrence(String key, boolean Default) {
        return pref.getBoolean(key, Default);
    }

    public void deletePref(String[] key) {
        editor = pref.edit();
        for (int i = 0; i < key.length; i++)
            editor.remove(key[i]);
        editor.apply();
    }

    public void deletePref(String key) {
        editor = pref.edit();
        editor.remove(key);
        editor.apply();
    }
}

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

для активности,

PreferenceUtils utils = new PreferenceUtils(classname.this);

для фрагмента,

PreferenceUtils utils = new PreferenceUtils(getActivity());

за услугу,

PreferenceUtils utils = new PreferenceUtils(getApplicationContext()); 

теперь для сохранения значений вы просто должны использовать объект класса PreferenceUtils,

например, в вашем случае,

utils.setPrefrences("Type", "Tutor");

и вы можете легко получить значение с этим объектом,

utils.getPrefrence("Type", null);

Счастливое кодирование.

0 голосов
/ 05 сентября 2018

При записи данных в общих настройках используйте commit () вместо apply ()

   sharedPref.edit().putString("Type", "Tutor").commit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...