Я создал фрагмент диалога входа в систему, который появляется, когда пользователь запускает приложение android. если учетные данные пользователя верны, он перейдет к основному действию. теперь я добавил флажок, который соответствует «держать меня в системе». я хочу, чтобы, когда пользователь установил флажок при первом входе в систему, он сразу переходил к основному действию при втором входе без необходимости повторять go через диалоговое окно входа в систему. вот мой код:
код для моего фрагмента диалога входа в систему:
private AlertDialog _dialog;
CheckBox chbx;
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.Inflate(Resource.Layout.logindlg, container, false);
Button button = view.FindViewById<Button>(Resource.Id.button1);
EditText MyeditText1 = view.FindViewById<EditText>(Resource.Id.editText1);
EditText MyeditText2 = view.FindViewById<EditText>(Resource.Id.editText2);
chbx= view.FindViewById<CheckBox>(Resource.Id.checkBox1);
user.Username = MyeditText1.Text;
user.Password = MyeditText2.Text;
button.Click += delegate {
//set the data to the loginpage
//mOnLoginInforCompleted.inputLoginInforCompleted(MyeditText1.Text.ToString(), MyeditText2.Text.ToString());
WSlogin.WebService2 ws = new WSlogin.WebService2();
ws.LoginAsync(MyeditText1.Text, MyeditText2.Text);
ws.LoginCompleted += Ws_LoginCompleted;
};
return view;
}
private void Ws_LoginCompleted(object sender, WSlogin.LoginCompletedEventArgs e)
{
try
{
if (e.Result.ValidUser == true)
{
if (chbx.Checked == true)
{
ISharedPreferencesEditor edit = user.pref.Edit();
edit.PutString("Username", user.Username);
edit.PutString("Password", user.Password);
edit.Apply();
}
Toast.MakeText(Application.Context, "login successful", ToastLength.Short).Show();
mOnLoginInforCompleted.inputLoginInforCompleted(user.Username, user.Password);
Dismiss();
}
else
{
//Toast.MakeText(Application.Context, "failed", ToastLength.Short).Show();
Context context = this.Context;
AlertDialog.Builder alert = new AlertDialog.Builder(context);
alert.SetTitle("login failed");
alert.SetMessage("Please, check your credentials!");
alert.SetPositiveButton("okay", (senderAlert, args) =>
{
CloseDialog();
});
_dialog = alert.Create();
_dialog.Show();
}
}
catch (System.Reflection.TargetInvocationException exp)
{
System.Net.WebException exception = new System.Net.WebException("can't reach server");
Toast.MakeText(this.Context, "Connection to Server failed", ToastLength.Long).Show();
}
}
private void CloseDialog()
{
if (_dialog != null)
_dialog.Dismiss();
}
private OnLoginInforCompleted mOnLoginInforCompleted;
public void setOnLoginInforCompleted(OnLoginInforCompleted onLoginInforCompleted)
{
mOnLoginInforCompleted = onLoginInforCompleted;
}
}
код для действия с MainLauncher = true
[Activity(Label = "FreeLineApp", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true, NoHistory = true)]
public class LoginActivity : AppCompatActivity,OnLoginInforCompleted
{
private AlertDialog _dialog;
public void inputLoginInforCompleted(string userName, string passWord)
{
//throw new NotImplementedException();
StartActivity(new Intent(this, typeof(MainActivity)));
}
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.layout1);
// StartActivity(typeof(MainActivity));
var current = Connectivity.NetworkAccess;
if (current == NetworkAccess.Internet)
{
string userName = user.pref.GetString("Username", String.Empty);
string password = user.pref.GetString("Password", String.Empty);
if (userName == String.Empty || password == String.Empty)
{
MyDialogFragment dialogFragment = new MyDialogFragment();
dialogFragment.setOnLoginInforCompleted(this);
dialogFragment.Cancelable = false;
var SupportFragmentManager = this.FragmentManager;
dialogFragment.Show(SupportFragmentManager, "dialog");
}
else
{
Intent intent = new Intent(this, typeof(MainActivity));
this.StartActivity(intent);
}
}
else
{
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.SetTitle("Connection failed");
alert.SetMessage("Please, check your internet Connection!");
alert.SetNeutralButton("okay", (senderAlert, args) => {
alert.Dispose();
MyDialogFragment dialogFragment = new MyDialogFragment();
dialogFragment.setOnLoginInforCompleted(this);
dialogFragment.Cancelable = false;
var SupportFragmentManager = this.FragmentManager;
dialogFragment.Show(SupportFragmentManager, "dialog");
});
_dialog = alert.Create();
_dialog.Show();
}
// Create your application here
}
}
}
где pref - глобальная переменная в классе user
public static ISharedPreferences pref = Application.Context.GetSharedPreferences("UserInfo", FileCreationMode.Private);
, но это не сработало. Я запускаю приложение в первый раз, ввожу свои учетные данные и устанавливаю флажок. затем выхожу из приложения и снова запускаю, но ничего не происходит. страница входа появляется снова. что я сделал не так? Простите за длинный пост. заранее спасибо