Пользователь Facebook на Parse.com

1

Как получить данные от пользователя Facebook на Parse.com? Код, который я приведу ниже, делает пользователя, но он не обновляет его данными при входе в систему, почему он не работает?

public class LoginActivity extends Activity {

private EditText usernameView;
private EditText passwordView;



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);


    LoginButton loginButton = (LoginButton)findViewById(R.id.login_button);
    loginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            onLoginButtonClicked();
        }
    });



    // Set up the login form.
    usernameView = (EditText) findViewById(R.id.etUsername);
    passwordView = (EditText) findViewById(R.id.etPassword);

    // Set up the submit button click handler
    findViewById(R.id.ibLogin).setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {

            onNormalLoginButton();
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    ParseFacebookUtils.onActivityResult(requestCode, resultCode, data);
}


private void onNormalLoginButton(){
    // Validate the log in data
    boolean validationError = false;
    StringBuilder validationErrorMessage =
            new StringBuilder(getResources().getString(R.string.error_intro)); //please

    if (isEmpty(usernameView)) {
        validationError = true;
        validationErrorMessage.append(getResources().getString(R.string.error_blank_username));//enter username
    }

    if (isEmpty(passwordView)) {
        if (validationError) {
            validationErrorMessage.append(getResources().getString(R.string.error_join));// and
        }
        validationError = true;
        validationErrorMessage.append(getResources().getString(R.string.error_blank_password));//enter password
    }
    validationErrorMessage.append(getResources().getString(R.string.error_end));// .

    // If there is a validation error, display the error
    if (validationError) {
        Toast.makeText(LoginActivity.this, validationErrorMessage.toString(), Toast.LENGTH_LONG) //LENGHT_LONG means how long the message will stand
                .show();
        return;
    }
    // Set up a progress dialog
    final ProgressDialog dlg = new ProgressDialog(LoginActivity.this);
    dlg.setTitle("Please wait.");
    dlg.setMessage("Logging in.  Please wait.");
    dlg.show();
    // Call the Parse login method
    ParseUser.logInInBackground(usernameView.getText().toString(), passwordView.getText()
            .toString(), new LogInCallback() {


        public void done(ParseUser user, ParseException e) {
            dlg.dismiss();
            if (e != null) {
                // Show the error message
                Toast.makeText(LoginActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
            } else {
                // Start an intent for the dispatch activity
                ParseUser userguy=ParseUser.getCurrentUser();
                boolean validated=userguy.getBoolean("emailVerified");

                if(validated)

                {

                    ParseInstallation installation = ParseInstallation.getCurrentInstallation();
                    installation.put("user", userguy.getObjectId());
                    installation.put("fullname",userguy.getString("fullname"));
                    installation.saveInBackground();
                    openMainActivity();
                }else{
                    Toast.makeText(LoginActivity.this, "You need to confirm your Email!",Toast.LENGTH_LONG).show();
                }

            }
        }
    });
}


private void onLoginButtonClicked() {
    List<String> permissions = Arrays.asList("email", "user_about_me");
    ParseFacebookUtils.logInWithReadPermissionsInBackground(this, permissions, new LogInCallback() {
        @Override
        public void done(ParseUser user, ParseException err) {
            if (user == null) {
                Log.d("MyApp", "Uh oh. The user cancelled the Facebook login.");
            } else if (user.isNew()) {
                Profile profile = Profile.getCurrentProfile();
                user.put("gender", "");
                user.put("location", "");
                user.put("age", "");
                user.put("meet", "");
                user.put("status", "");
                user.put("link", "");
                user.put("fullname", profile.getName());
                user.setEmail("");
                user.signUpInBackground();
                ParseInstallation installation = ParseInstallation.getCurrentInstallation();
                installation.put("user", user.getObjectId());
                installation.put("fullname", user.getString("fullname"));
                installation.saveInBackground();
                openMainActivity();
            } else {
                Log.d("MyApp", "User logged in through Facebook!");
                ParseInstallation installation = ParseInstallation.getCurrentInstallation();
                installation.put("user", user.getObjectId());
                installation.put("fullname", user.getString("fullname"));
                installation.saveInBackground();
                openMainActivity();

            }
        }
    });

}


private void openMainActivity(){
    Intent intent = new Intent(LoginActivity.this, DispatchActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

private boolean isEmpty(EditText etText) {
    if (etText.getText().toString().trim().length() > 0) {
        return false;
    } else {
        return true;
    }
}


public void signUp(View view) {
    Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}
}

Игнорировать onNormalLoginButton() он работает, onloginButtonClicked().

Изменение: я пробовал это, но он тоже не работал.

user.saveInBackground(new SaveCallback() {
                    @Override
                    public void done(ParseException e) {
                        if(e!=null){
                            Toast.makeText(LoginActivity.this,"User data didn't save!",Toast.LENGTH_SHORT).show();
                        }else{
                        openMainActivity();}
                    }
                });
Теги:
parse.com
facebook
facebook-login

1 ответ

1
Лучший ответ

Посмотрите на код ниже. Почему вы вызываете user.signUpInBackground(); еще раз? Я думаю, что это должен быть user.saveInBackground(); Кроме того, проверьте тип данных своих полей, чтобы убедиться, что вы поместили правильный тип данных (пример: int/float/double для Number)

else if (user.isNew()) {
                Profile profile = Profile.getCurrentProfile();
                user.put("gender", "");
                user.put("location", "");
                user.put("age", "");
                user.put("meet", "");
                user.put("status", "");
                user.put("link", "");
                user.put("fullname", profile.getName());
                user.setEmail("");
                user.signUpInBackground();
                ParseInstallation installation = ParseInstallation.getCurrentInstallation();
                installation.put("user", user.getObjectId());
                installation.put("fullname", user.getString("fullname"));
                installation.saveInBackground();
                openMainActivity();
            }

Из документа parse user.isNew() → Пользователь зарегистрировался и зарегистрировался через Facebook!

ParseFacebookUtils.logInWithReadPermissionsInBackground(this, permissions, new LogInCallback() {
  @Override
  public void done(ParseUser user, ParseException err) {
    if (user == null) {
      Log.d("MyApp", "Uh oh. The user cancelled the Facebook login.");
    } else if (user.isNew()) {
      Log.d("MyApp", "User signed up and logged in through Facebook!");
    } else {
      Log.d("MyApp", "User logged in through Facebook!");
    }
  }
});

Если это не сработает, попробуйте ввести код ниже, чтобы узнать, успешно ли сохранен ваш пользователь или нет.

user.saveInBackground(new SaveCallback() { 
  @Override public void done(ParseException e) { 
    if (e != null) { 
      Log.e("Exception", e.getMessage()); 
      return; 
  } 
  Log.e("OK", "Saved!"); 
}});
  • 0
    Просто обновите мой ответ, попробуйте
  • 0
    Да, я просто пытался сделать это, но это не удалось. Я попробовал это, чтобы увидеть, может ли он переходить к следующему занятию слишком быстро, чтобы у него не было времени для обновления или чего-то еще. Но, похоже, это не так.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню