Вот мой код, который запрашивает у пользователя их имя пользователя:

private void request_user_name() {
 final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Enter name:");

    final EditText input_field = new EditText(this);
    input_field.setText(sharedpreferences.getString("username",""));
    final SharedPreferences.Editor editor = sharedpreferences.edit();

    builder.setCancelable(false);
    builder.setView(input_field);
    final String savedName = sharedpreferences.getString(username,"");

    input_field.setText(savedName);
    input_field.setSelection(input_field.getText().length());
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            name = input_field.getText().toString();


            if(TextUtils.isEmpty(savedName)) {
                input_field.setError("Your message");
                builder.setCancelable(false);
            }
            editor.putString(username, name);
            editor.apply();
        }
    });

    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

            if(TextUtils.isEmpty(savedName)) {
                input_field.setError("Your message");
                builder.setCancelable(false);
            }
            else
            {
                dialogInterface.cancel();
                request_user_name();
            }

        }
    });
    builder.show();
}

И вот как я передаю имя пользователя следующему действию:

  intent.putExtra("room_name",((TextView)view).getText().toString() );
            intent.putExtra("user_name",name);
            intent.putExtra("default_name","anyonymous");
            startActivity(intent);

И вот как я получаю Intent Extra в следующем действии:

 if (getIntent().getExtras() != null
            && getIntent().getExtras().get("user_name")!=null) {

        user_name =  getIntent().getExtras().get("user_name").toString();

    }else{

        user_name =  getIntent().getExtras().get("default_name").toString();
    }

Моя проблема в том, что когда пользователи не вводят свое имя, и он возвращает null, он возвращает anyonymous, но когда пользователи вводят его имя, он передает имя пользователя следующему действию. Но когда я перезапускаю приложение, оно снова передает anyonymous следующему действию вместо того, чтобы пользователь уже ввел

Поэтому мне нужно предложение о том, как сохранить введенное имя пользователя в общих настройках и использовать то же самое при следующем запуске приложения, если только новое имя не будет введено вместо anyonymous

Заранее спасибо.

0
Hrithik Rawal 17 Апр 2018 в 05:16

1 ответ

Лучший ответ

Если вы уже используете SharedPreferences для хранения user_name, вам не нужно передавать user_name через Intent. SharedPreferences являются глобальными и доступны во всем приложении. Просто делать:

sharedpreferences.getString("username","anonymous")

В вашей целевой деятельности.

0
Sagar 17 Апр 2018 в 02:21