代码之家  ›  专栏  ›  技术社区  ›  Hrithik Rawal

如何在共享首选项中保存意向附加项

  •  0
  • Hrithik Rawal  · 技术社区  · 6 年前

    以下是请求用户输入用户名的代码:

    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);
    

    这就是我在下一个活动中获得额外意图的方式:

     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 但当用户输入用户名时,它会将用户名传递给下一个活动。但当我重新启动应用程序时,它再次通过 无名氏 转到下一个活动,而不是用户用户用户已输入

    因此,我需要建议如何将输入的用户名保存在共享首选项中,并在以后的应用程序启动中使用相同的用户名,除非没有输入新名称而不是 无名氏

    提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Sagar    6 年前

    如果您已经在使用 SharedPreferences 要存储用户名,则不需要传递 user_name 通过 Intent 共享引用 是全局的,可以在整个应用程序中访问。只需执行以下操作:

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

    在您的目标活动中。