Вызов ParseUser.getCurrentUser (). GetUsername () возвращает значение NULL после подтверждения входа пользователя в систему. - PullRequest
0 голосов
/ 20 марта 2020

У меня есть Google Map Activity, которая запускается после входа пользователя в систему с помощью сервера Back4App Parse. В методе onCreate этого действия я могу напечатать имя пользователя в LogCat с вызовом ParseUser.getCurrentUser (). GetUsername (). Я могу напечатать это снова в методе onMapReady с тем же самым вызовом. Однако, когда я go для выхода пользователя из системы после нажатия кнопки выхода из системы, ParseUser.getCurrentUser (). GetUsername () возвращает ноль и вылетает из моего приложения. Я знаю, что могу хранить имя пользователя в строке, когда вызов работает, но я хочу знать, ПОЧЕМУ пользователь недоступен в моем методе onClick.

public class PassengerMapActivity extends FragmentActivity implements OnMapReadyCallback,
                                                                      View.OnClickListener {
  private GoogleMap map;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_passenger_map);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    Log.i("onCreate", ParseUser.getCurrentUser().getUsername()); // this works 
  }

  @Override
  public void onMapReady(GoogleMap googleMap) {
    map = googleMap;

    Log.i("onMapReady", ParseUser.getCurrentUser().getUsername()); // this works too

    locationListener = new LocationListener() {
      @Override
      public void onLocationChanged(Location location) {
        updateMapCamera(location);
      }
      ... // unused interface methods
    };
  }

  @Override
  public void onClick(View view) {
    switch(view.getId()) {
      case R.id.btn_logout_passenger:
        final String currentUser = ParseUser.getCurrentUser().getUsername(); // this returns null
        ParseUser.logOutInBackground(new LogOutCallback() {
          @Override
          public void done(ParseException e) {
            if(e == null) {
              Toast.makeText(PassengerMapActivity.this,  
              currentUser + " has logged out", Toast.LENGTH_SHORT).show();
            }
          }
        });
        break;

Информация журнала: 2020-03-22 17: 11: 47.035 2969-2969 / packageName E / AndroidRuntime: FATAL EXCEPTION: main Process: packageName, PID: 2969 java .lang.NullPointerException: попытка вызвать виртуальный метод 'java .lang.String com.parse.ParseUser. getUsername () 'для пустой ссылки на объект

...