【发布时间】:2017-05-26 21:18:11
【问题描述】:
我是 Android 和 Firebase 云消息传递的 MVP 模式的新手。我有一个应用程序接收从 Firebase 控制台发送的 FCM 通知。
为了测试应用程序,我使用 FirebaseAuth 向 Firebase 添加了一个用户,并通过电子邮件和密码进行身份验证。电子邮件和 FCM 令牌正在保存到 SharedPreferences 并且正在接收通知。
问题:我现在需要从SharedPreferences 和 FCM 令牌发送一封电子邮件到我的应用程序服务器。我在网上阅读了很多关于从 SharedPreferences 和 Context 检索数据的内容,但仍然无法将它们放在一起。
我收到一条错误消息,指出方法 getInstance(this) 不能应用于 LoginPresenter.java(检查下面的代码 sn-p)。我很确定我做错了什么。请各位,指出我正确的方向。
public class LoginPresenter implements LoginContract.Presenter, LoginInteractor.Callback {
@Override
public void onAuthSuccess() {
//Show notifications
mLoginView.showPushNotifications();
//Get master token before sending it to the server
String savedToken = FirebaseInstanceId.getInstance().getToken();
//TODO:Check if token is not null.
//Get user email
final String savedEmail = SharedPrefManager.getInstance(this).getUserEmail();
saveTokenToServer(savedEmail, savedToken);
}
我正在使用以下类来管理 SharedPreferences:
public class SharedPrefManager {
private static final String SHARED_PREF_NAME = "FCMSharedPref";
private static final String TAG_EMAIL = "tagemail";
private static SharedPrefManager mInstance;
private static Context mCtx;
private SharedPrefManager(Context context) {
mCtx = context;
}
public static synchronized SharedPrefManager getInstance(Context context) {
if (mInstance == null) {
mInstance = new SharedPrefManager(context);
}
return mInstance;
}
//this method will save the email to shared preferences
public boolean saveDeviceEmail(String email) {
SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(TAG_EMAIL, email);
editor.apply();
return true;
}
//this method will fetch the device token from shared preferences
public String getUserEmail() {
SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
return sharedPreferences.getString(TAG_EMAIL, null);
}
}
提前谢谢你
【问题讨论】:
-
this指的是没有Context的 Presenter,您可以使用this引用,您必须将Context传递给您的 Presenter 或从您的 @987654332 中检索它@
标签: android android-fragments sharedpreferences firebase-authentication firebase-cloud-messaging