==
сравнивает ссылки на объекты.
.equals()
сравнивает значения String.
Иногда ==
дает иллюзии сравнения значений String, как в следующих случаях:
String a="Test";
String b="Test";
if(a==b) ===> true
Это связано с тем, что при создании любого строкового литерала JVM сначала ищет этот литерал в пуле строк, и если он найдет совпадение, эта же ссылка будет передана новой String. Из-за этого получаем:
(a == b) ===> true
String Pool
b -----------------> "test" <-----------------a
Однако ==
не выполняется в следующем случае:
String a="test";
String b=new String("test");
if (a==b) ===> false
В этом случае для new String("test")
оператор new String будет создан в куче, и эта ссылка будет указана на b
, поэтому b
будет дана ссылка на кучу, а не на String pool.
Теперь a
указывает на String в пуле String, а b
указывает на String в куче. Из-за этого мы получаем:
, если (a == b) ===> false.
String Pool
"test" <-------------------- a
Heap
"test" <-------------------- b
Пока .equals()
всегда сравнивает значение String, поэтому дает true в обоих случаях:
String a="Test";
String b="Test";
if(a.equals(b)) ===> true
String a="test";
String b=new String("test");
if(a.equals(b)) ===> true
Таким образом, использование .equals()
всегда лучше.
Ну, в первый раз, когда вы запускаете приложение, isFirstTime
имеет значение true, поэтому следующий блок выполняется
if (isFirstTime)
{
//implement your first time logic
editor.putBoolean("isFirstTime", false);
editor.commit();
Intent mainIntent;
mainIntent = new Intent(SplashActivity.this, LoginActivity.class);
startActivity(mainIntent);
finish();
}
После того, как этот блок isFirstTime
становится ложным
Теперь, в ваш getlogindetails
@Override
public void onResponse(Call<Login> call, Response<Login> response) {
// String status=response.body().getStatus().toString();
if (response !=null && response.isSuccessful()) {
String status = response.body().getStatus();
if(status=="success") {
progressDialog.dismiss();
Toast.makeText(LoginActivity.this, "Login successfully", Toast.LENGTH_SHORT).show();
Intent mainIntent;
mainIntent = new Intent(LoginActivity.this, DeviceControlActivity.class);
startActivity(mainIntent);
finish();
}
Здесь вы не обработали случай, когда status!="success"
.
Итак, здесь ничего не происходит, и вы остаетесь в loginActivity. Теперь, когда вы снова запускаете приложение, поскольку isFirstTime
имеет значение false, вы перенаправлены на DeviceControlActivity
из-за следующего блока в вашем коде.
else{
Intent mainIntent;
mainIntent = new Intent(SplashActivity.this, DeviceControlActivity.class);
startActivity(mainIntent);
finish();
}
Итак, в основном вам нужно обработать случай, когда status!="success"
, а также я бы посоветовал вам изменять значение sharedPreference только тогда, когда вы получите status=="success"
Редактировать:
blockquote>Добавить блок else для
if(status=="success")
и показать несколько сообщений об ошибках в тосте.И поместите следующий блок в
if(status=="success")
, удалите его с того места, где вы его написали.editor.putBoolean("isFirstTime", false); editor.commit();
Надеюсь, это поможет!
проверить значение состояния usign Log.e (); код работает только тогда, когда значение статуса является успешным, тогда что, если значение статуса не является успешным?
String status = response.body().getStatus();
if(status.equals("success"))
{
progressDialog.dismiss();
Toast.makeText(LoginActivity.this, "Login successfully", Toast.LENGTH_SHORT).show();
Intent mainIntent = new Intent(LoginActivity.this, DeviceControlActivity.class);
startActivity(mainIntent);
finish();
}
Сделайте еще частью для этого и сделайте соответствующий массаж. [ 112]
Я надеюсь, что вы получите точку
mainIntent = new Intent(LoginActivity.this, DeviceControlActivity.class);
показывает, что его перемещение в DeviceControlActivity.class. проверьте в этом классе.
Установите getApplicationContext()
вместо LoginActivity.this
и поставьте finish()
перед mainIntent
.
if(status=="success") {
progressDialog.dismiss();
Toast.makeText(LoginActivity.this, "Login successfully", Toast.LENGTH_SHORT).show();
finish();
Intent mainIntent = new Intent(getApplicationContext(), DeviceControlActivity.class);
startActivity(mainIntent);
}
Надеюсь, это поможет вам.