если статус успешен, то также блокировать выполнение в Android

== сравнивает ссылки на объекты.

.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() всегда лучше.

0
задан jyo cha 21 January 2019 в 06:51
поделиться

4 ответа

Ну, в первый раз, когда вы запускаете приложение, 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"

Редактировать:

Добавить блок else для if(status=="success") и показать несколько сообщений об ошибках в тосте.

И поместите следующий блок в if(status=="success"), удалите его с того места, где вы его написали.

editor.putBoolean("isFirstTime", false);
editor.commit();

Надеюсь, это поможет!

0
ответ дан Rohit Singh 21 January 2019 в 06:51
поделиться

проверить значение состояния 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]

Я надеюсь, что вы получите точку

0
ответ дан jyo cha 21 January 2019 в 06:51
поделиться
  mainIntent = new Intent(LoginActivity.this, DeviceControlActivity.class);

показывает, что его перемещение в DeviceControlActivity.class. проверьте в этом классе.

0
ответ дан Kannan panneer selvam 21 January 2019 в 06:51
поделиться

Установите 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);

}

Надеюсь, это поможет вам.

0
ответ дан Rohit Singh 21 January 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: