我有一个简单的ActionBarActivity,它包含一个PreferenceFragment,如下所示:
import android.app.Activity;
import android.os.Bundle;
import android.preference.PreferenceFragment;
public class SettingsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
// Display the fragment as the main content.
getFragmentManager().beginTransaction()
.replace(R.id.fra_settings_container, new SettingsFragment()).commit();
}
public static class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的preferences.xml:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
android:defaultValue="15"
android:dialogTitle="@string/settings_heading_alarm_interval"
android:entries="@array/alarm_interval_entries"
android:entryValues="@array/alarm_interval_values"
android:key="alarm_interval"
android:title="@string/settings_heading_alarm_interval" />
<ListPreference
android:defaultValue="1"
android:dialogTitle="@string/settings_heading_alarm_type"
android:entries="@array/alarm_type_entries"
android:entryValues="@array/alarm_type_values"
android:key="alarm_type"
android:title="@string/settings_heading_alarm_type"
/>
<CheckBoxPreference …
Run Code Online (Sandbox Code Playgroud) 我目前正在构建一个利用RxJava 2和Firebase的小型社交媒体风格的应用程序.我正在使用MVP样式架构,并且我使用名为AuthSource的接口抽象出了我的AuthService.
为简单起见,我将在我的服务中使用Single方法:
public class FirebaseAuthService implements AuthSource {
private FirebaseAuth auth;
private FirebaseAuth.AuthStateListener listener;
//initialization code
@Override
public Maybe<User> getUser() {
return Maybe.create(new MaybeOnSubscribe<User>() {
@Override
public void subscribe(final MaybeEmitter<User> e) throws Exception {
if (auth == null) {
auth = FirebaseAuth.getInstance();
}
if (listener != null) {
auth.removeAuthStateListener(listener);
}
listener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
auth.removeAuthStateListener(listener);
if (firebaseUser != null) {
User user = …
Run Code Online (Sandbox Code Playgroud) 我有一个DispatchActivity作为我的Launcher Activity,用于检查当前是否有用户登录.如果用户已登录,我将它们发送到他们的ProfileActivity.否则,我将它们发送到LogInActivity.这是我在DispatchActivity中的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dispatch);
//.....................
auth = FirebaseAuth.getInstance();
authListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
launchProfileActivity();
} else {
// User is signed out
launchLoginActivity();
}
}
};
}
@Override
public void onStart() {
super.onStart();
auth.addAuthStateListener(authListener);
}
@Override
public void onStop() {
super.onStop();
if (authListener != null) {
auth.removeAuthStateListener(authListener);
}
}
Run Code Online (Sandbox Code Playgroud)
无论我做什么,firebaseAuth.getCurrentUser(),永远不会在我的主要测试设备上返回null.根据文档,getCurrentUser()将为null,除非有一个用户当前登录.当我记录这个用户的一些细节时,它们与我之前创建的"测试"用户一致,(即调用user.getEmail()返回"email@example.com".
这是有问题的,因为我肯定在我的控制台的用户数据库(在身份验证/用户中)中没有任何用户.我不久前从数据库中删除了这个测试用户,数据库是空的.
我尝试在另一台设备上运行App,并且它正确执行.但是,在我的主要测试设备上执行全新安装并不能解决问题.
问题: …
我制作了一个基本的数据记录应用程序,它应该让用户将值输入到动态且通常大量的 EditText 视图中。用户输入完所有数据后,可以按下一个按钮,拍摄数据条目的图片(请耐心等待将输入存储为图片,这样做是有特定原因的),并将图片保存到存储中。
问题: 除了一个特定问题外,它运行得很好。有时,当用户将手机置于空闲状态时(这种情况在实际保存输入之前经常发生),EditText 视图中的所有输入都会被清除(让我成为一个非常生气/悲伤的人)。更重要的是,只有当我在现场并且无法查看 Eclipse 中的日志文件以找出哪些方法可能被调用与正常情况不同时,才会发生这种情况。
问题:为什么当手机进入空闲状态和从空闲状态返回时,我的 EditText 中的值大部分时间都保持不变,但在看似随机(且通常不方便)的情况下它们会清除?
我有一种感觉,这是由于在某些情况下调用 onStop() 而不是 onPause() (或者反之亦然)引起的,但我对这些方法的了解还不够及时。另外,我知道这个问题可以通过共享首选项文件(或一些类似的想法)来解决,但我想知道发生了什么,以便更好地理解。
细节:
-我不确定这些代码中的任何一个是否可能以有意义的方式与该问题相关,但如果有帮助的话,我将包含我的 onCreate() 方法的片段。让我知道是否需要添加其他内容:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_input_param);
Intent intent = getIntent();
//Rest of the code just builds the layout from data taken from the intent
Run Code Online (Sandbox Code Playgroud)
- 除了 onCreate() 之外,我没有重写任何生命周期方法(即 onStop()、onResume() 等)。据我所知,我的活动中的其他方法都不应该与该问题有任何关系