2017-02-10 4 views
0

Я пытаюсь реализовать простое приложение для входа в систему, в котором данные пользователя, такие как имя пользователя и пароль, жестко закодированы в нем с использованием общих настроек. Когда я пытаюсь запустить приложение, он отображает пустой белый экран и подтачивает мой комментарий бесконечным временем, даже когда я очищаю кеш приложения. Как это исправить. Пожалуйста, помогите мне.! Это мое начало деятельностиAndroid-приложение отображает белый пустой экран при запуске

public class MainActivity extends AppCompatActivity { 
BaseClass session; 
EditText userName; 
EditText passWord; 
Button logIn; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); 
    session = new BaseClass(getBaseContext()); 
     // <---- run your one time code here 
     // BaseClass.getApp(); 
     userName = (EditText) findViewById(R.id.etusername); 
     passWord = (EditText) findViewById(R.id.etpassword); 
     logIn = (Button) findViewById(R.id.btnlogin); 
    //toasting line 
     Toast.makeText(getBaseContext(),"User Login Status: "+session.isUserLoggedIn(),Toast.LENGTH_LONG).show(); 
    session.checkLogin(); 
     logIn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String user = userName.getText().toString().trim(); 
       String pass = passWord.getText().toString().trim(); 
       String userVal = session.pref.getString(KEY_USERNAME, "username"); 
       String passVal = session.pref.getString(KEY_PASSWORD, "password"); 
       // userName.setText(userVal); 
       // passWord.setText(passVal); 
       Toast.makeText(getBaseContext(), "Editfield value:" + user, Toast.LENGTH_LONG).show(); 
       Toast.makeText(getBaseContext(), "Actual username:" + userVal, Toast.LENGTH_LONG).show(); 
       if (user.equals(userVal) && pass.equals(passVal)) { 
        session.createUserLoginSession(userVal, 
          passVal); 
        Intent intent = new Intent(MainActivity.this, QRScanning.class); 
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
        startActivity(intent); 

       } else { 
        Toast.makeText(getApplicationContext(), "Wrong Credentials", Toast.LENGTH_SHORT).show(); 
        userName.setText(""); 
        passWord.setText(""); 
       } 
      } 
     }); 
    } 
} 

Ans экземпляр приложения является

public class BaseClass extends Application { 
//private static BaseClass sInstance; 
public static final String PREFER_NAME = "Userdetails"; 
private static final String IS_USER_LOGIN = "IsUserLoggedIn"; 
public static final String KEY_USERNAME = "username"; 
public static final String KEY_PASSWORD = "password"; 
public static final String firstTime = "jjj"; 
public SharedPreferences pref; 
SharedPreferences.Editor editor; 
Context mContext; 
int PRIVATE_MODE = 0; 
@Override 
public void onCreate() { 
    super.onCreate(); 
    BaseClass session = new BaseClass(getApplicationContext()); 
    if (!session.pref.getBoolean(firstTime, false)) { 

     session.editor.putString(KEY_USERNAME, "retailer"); 
     session.editor.putString(KEY_PASSWORD, "beco123"); 

     // mark first time has runned. 
     // SharedPreferences.Editor editor = pref.edit(); 
     session.editor.putBoolean("firstTime", true); 
     session.editor.commit(); 
    } 
} 
public BaseClass(Context context) { 
    this.mContext = context; 
    pref = mContext.getSharedPreferences(PREFER_NAME, PRIVATE_MODE); 
    editor = pref.edit(); 
} 
public BaseClass() { 
} 
//Create login session 
public void createUserLoginSession(String username, String password) { 
    // Storing login value as TRUE 
    editor.putBoolean(IS_USER_LOGIN, true); 

    // Storing username in pref 
    editor.putString(KEY_USERNAME, username); 

    // Storing password in pref 
    editor.putString(KEY_PASSWORD, password); 

    // commit changes 
    editor.commit(); 
} 
public void checkLogin() { 
    // Check login status 
    if (!this.isUserLoggedIn()) { 

     // user is not logged in redirect him to Login Activity 
     Intent i = new Intent(mContext, MainActivity.class); 

     // Closing all the Activities from stack 
     i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

     // Add new Flag to start new Activity 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     // Staring Login Activity 
     mContext.startActivity(i); 
    } 
} 
public void logoutUser() { 

    // Clearing all user data from Shared Preferences 
    editor.clear(); 
    editor.commit(); 
    // After logout redirect user to Login Activity 
    Intent i = new Intent(mContext, MainActivity.class); 
    // Closing all the Activities 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    // Add new Flag to start new Activity 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    // Staring Login Activity 
    mContext.startActivity(i); 
} 
public boolean isUserLoggedIn() { 
    return pref.getBoolean(IS_USER_LOGIN, false); 
} 

}

+2

Вы не должны создавать экземпляр приложения руками, это ответственность за рамки. Я считаю, что это главная проблема. – Bracadabra

ответ

3

Вы собираетесь в петлю.

При вызове session.checkLogin() из вашего onCreate метода внутри MainActivity, так как пользователь не вошел в систему, вы начинаете снова MainActivity, а затем снова показывая Тост и снова вы звоните session.chechLogin(), и так далее.

Вы должны попытаться исправить ваш поток кода.

Надеется, что это помогает

Update

Пытаться исправить таким образом:

Изменить checkLogin метод так:

public boolean checkLogin() { 
    // Check login status 
    return(this.isUserLoggedIn()); 
} 

И затем, в вашем MainActivity классе делать

public class MainActivity extends AppCompatActivity { 
    BaseClass session; 
    EditText userName; 
    EditText passWord; 
    Button logIn; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     session = new BaseClass(getBaseContext()); 
     if (session.checkLogin()) { 
      Intent intent = new Intent(MainActivity.this, QRScanning.class); 
      startActivity(intent); 
      finish(); 
     } 

     setContentView(R.layout.activity_main); 

     // <---- run your one time code here 
     // BaseClass.getApp(); 
     userName = (EditText) findViewById(R.id.etusername); 
     passWord = (EditText) findViewById(R.id.etpassword); 
     logIn = (Button) findViewById(R.id.btnlogin); 
     //toasting line 
     Toast.makeText(getBaseContext(),"User Login Status: "+session.isUserLoggedIn(),Toast.LENGTH_LONG).show(); 

     logIn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       // YOUR CODE TO HANDLE LOGIN HERE 
      } 

     }); 
    } 
} 
+0

Как это исправить? Я новичок в андроиде, помогите мне! – vm345

+0

Я бы создал функцию LoginActivity, которая выполняет следующие действия: проверьте, вошел ли пользователь в систему. Если да, запускается MainActivity и заканчивается() LoginActivity. В противном случае отображается пользовательский макет для входа в систему (EditText (s) или что-то еще). В этом сценарии LoginActivity должен быть установлен как ваша деятельность LAUNCHER в AndroidManifest.xml –

+0

не работает ...! – vm345

0

хорошо так проблемы с вашим кодом является то, что вы проверяете, если пользователь вошел в систему в строке: Toast.makeText (getBaseContext(), «User LoginStatus:» + session.isUserLoggedIn(), Toast.LENGTH_LONG).показать();

, который печатает false, а затем вы проверяете session.checkLogin() в следующей строке.

checkLogin() проверяет, вошел ли пользователь в систему, и поскольку он еще не вошел в систему, он снова запускает mainActivity, поэтому, прежде чем какой-либо пользовательский интерфейс будет показан пользователю в mainActivity, вы снова начнете mainActivity, поэтому нет интерфейса и вы постоянно открываете mainActivity, и тост показан снова и снова.

удалить session.checkLogin(), и это устранит вашу проблему.

 Смежные вопросы

  • Нет связанных вопросов^_^