Я столкнулся с той же проблемой, и я решил это следующим образом:
Когда пользователь вводит логин, я сохраняю адрес электронной почты и пароль в общих настройках. И после создания пользователя я снова вхожу в систему с помощью электронной почты и пароля, которые я сохранил ранее.
String currentEmail = MyApp.getSharedPreferences().getEmail();
String currentPass = MyApp.getSharedPreferences().getPass();
FirebaseAuth auth = FirebaseAuth.getInstance();
auth.createUserWithEmailAndPassword(email, pass)
.addOnCompleteListener(AddStudent.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull final Task<AuthResult> task) {
if (task.isSuccessful()) {
String currentEmail = MyApp.getSharedPreferences().getEmail();
String currentPass = MyApp.getSharedPreferences().getPass();
//Sign in again
auth.signInWithEmailAndPassword(currentEmail, currentPass)
.addOnCompleteListener(AddStudent.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Log.e("RELOGIN", "FAILED");
} else {
Log.e("RELOGIN", "SUCCESS");
}
}
});
finish();
}
}
});
Я одобрил бы основанный на стандартах подход. Поместите свою информацию о версии (наряду с другим полезным материалом издателя, таким как номер сборки, число пересмотра подверсии, автор, детали компании, и т.д.) в Файле манифеста банки.
Это - хорошо зарегистрированная и понятая спецификация Java. Сильная поддержка инструмента существует для создания файлов манифеста (базовая задача Ant, например, или плагин банки знатока). Они могут помочь с установкой некоторых атрибутов автоматически - мне настроили знатока для помещения номера версии знатока банки, пересмотра Подверсии и метки времени в декларацию для меня во время изготовления.
Можно считать содержание декларации во времени выполнения со стандартными вызовами API Java - что-то как:
import java.util.jar.*;
...
JarFile myJar = new JarFile("nameOfJar.jar"); // various constructors available
Manifest manifest = myJar.getManifest();
Map<String,Attributes> manifestContents = manifest.getAttributes();
Мне, который чувствует себя подобно большему количеству подхода стандарта Java, так вероятно, окажется более легким для последующих специалистов по обслуживанию кода следовать.
Я не забываю видеть что-то подобное в проекте с открытым исходным кодом:
class Version... {
public static String tstamp() {
return "@BUILDTIME@";
}
}
в шаблонном файле. С копией фильтрации Муравья можно дать этому макросу значение:
<copy src="templatefile" dst="Version.java" filtering="true">
<filter token="BUILDTIME" value="${build.tstamp}" />
</copy>
используйте это для создания исходного файла Version.java в процессе сборки перед шагом компиляции.
AFAIK там не является способом сделать это с javac. Это может легко быть сделано с Муравьем - я создал бы объект первого класса по имени BuildTimestamp.java и генерировал бы тот файл во время компиляции через целевой объект Ant.
Вот тип Муравья, который будет полезен.
Если Вы не хотите выполнить свой источник Java через Препроцессор C/C++ (который является БОЛЬШИМ НЕТ - НЕТ), используйте метод банки. Существуют другие способы вытащить корректные ресурсы из банки, чтобы удостовериться, что кто-то не помещал дублирующийся ресурс на путь к классу. Вы могли также рассмотреть использование декларации Банки для этого. Мой проект делает точно, что Вы пытаетесь сделать (с датами сборки, изменениями, автором, и т.д.) использование декларации.
Вы захотите использовать это:
Enumeration<URL> resources = Thread.currentThread().getContextClassLoader().getResources("META-INF/MANIFEST.MF");
Это получит Вас ВСЕ декларации на пути к классу. Можно выяснить, от какой банки они могут путем парсинга URL.
Лично я пошел бы для файла раздельного имущества в Вашей банке, которую Вы загрузите во времени выполнения... classloader имеет определенный порядок на поиск файлов - я не могу помнить, как он работает точно от руки, но я не думаю, что другой файл с тем же именем где-нибудь на пути к классу, вероятно, вызвал бы проблемы.
Но иначе Вы могли сделать это, должен будет использовать Муравья для копирования .java файлов в другой каталог прежде, чем скомпилировать их, просачиваясь Строковые константы как соответствующие. Вы могли использовать что-то как:
public String getBuildDateTime() {
return "@BUILD_DATE_TIME@";
}
и запишите фильтр в своем файле Муравья для замены этого свойством сборки.
Возможно, больше стиля Java способ указать на версию Вашей библиотеки должно было бы добавить номер версии к декларации JAR, как описано в явной документации.
Одно предложение, которое я получил от коллеги, должно было заставить файл муравья создавать файл на пути к классу и упаковывать это в JAR и иметь считанный методом.... По моему мнению это - взлом и могло обойтись/повредиться кем-то имеющим столь же именованный файл вне JAR, но на пути к классу.
Я не уверен, что получение Муравья генерировать файл является ужасно вопиющим взломом, если это - взлом вообще. Почему бы не генерировать файл свойств и использование java.util. Свойства для обработки его?