Java 将字符串从第一个活动传递到最后一个活动,但在开始最后一个活动之前运行另一个活动

Java 将字符串从第一个活动传递到最后一个活动,但在开始最后一个活动之前运行另一个活动,java,android,android-activity,Java,Android,Android Activity,我对Android非常陌生,如果问题重复,请避免并发送链接。 有三个活动A、B和C。活动A获取一个用户名,我想在活动C中显示该用户名,但我想先运行活动B,然后再运行活动C。使用intent的问题是我必须先运行C。如果单件、捆绑或包裹是解决方案,您能提供代码吗 活动A public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState)

我对Android非常陌生,如果问题重复,请避免并发送链接。 有三个活动A、B和C。活动A获取一个用户名,我想在活动C中显示该用户名,但我想先运行活动B,然后再运行活动C。使用intent的问题是我必须先运行C。如果单件、捆绑或包裹是解决方案,您能提供代码吗

活动A

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final EditText nameText = findViewById(R.id.nameText);
    nameText.setOnEditorActionListener(new OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            String name = nameText.getText().toString();
            return true;
        }
    });
}
活动B

    public class qPage2 extends AppCompatActivity {

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_q_page2);
                android.os.SystemClock.sleep(500);
            }
        }
活动C

public class lastPage extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_last_page);
    }
}

这方面有很多选择:

  • 您可以使用您提到的意图
  • 您可以创建一个静态类,并使用string类型声明一个静态变量 并在C活动中访问它
  • 第一个选项的代码: 为意图增加价值

     Intent n = new Intent(FirstActivity.class,SecondActivity.class);
    n.putExtra("name" , name);
    n.startActivity();
    
    要检索它,请执行以下操作:

    Intent intent = getIntent();
    String name = intent.getStringExtra("name");
    
    2.创建一个静态类成员并访问它

    class static StaticClass{
         static name = " ";
     }
    

    在第一个活动中更新此变量,并在最后一个活动中检索它

    这比您想象的要简单。例如,如果要通过B将
    Tasif
    字符串从a发送到C

    在活动A中

    Intent intent = new Intent(A.this, B.class);
    intent.putExtra("username", "Tasif");
    startActivity(intent);
    
    在活动B中

    Intent intent = new Intent(B.this, C.class);
    intent.putExtras(getIntent()); // Add this line, it will copy all data in intent which starts activity B (including `username`).
    startActivity(intent);
    
    在活动C中

    String username = getIntent().getStringExtra("username");
    

    将活动“A”中的
    字符串声明为
    公共静态
    ,并将活动“A”中的字符串存储在其中

    例如:活动A.java

     public static String first = "hello";
    
    然后在活动“C”中,将其称为

    activity C.java

    String last = A.first; 
    

    您可以将该字符串存储在
    SharedReferences
    中,并可以在项目中的任何位置访问该字符串。如果您不熟悉
    SharedReferences
    请阅读本文档

    一个简单明了的方法是使用SharedReferences数据存储选项。它用于保存一小部分数据,如键值对

    将用户名保存在活动A中的SharedReferences中,如下所示:

    SharedPreferences sharedPref = getSharedPreferences(
        getString("MyKeyPairFileName"), Context.MODE_PRIVATE);
    sharedPref.edit().putString("userKey", "Your username").apply;
    
    从任何活动(B或C或D或…Z)中读取值,如下所示:

    SharedPreferences sharedPref = getSharedPreferences(
        getString("MyKeyPairFileName"), Context.MODE_PRIVATE);
    String username = sharedPref.getString("userKey", null);
    /*null is the default value, if value for the key is not available*/);
    

    使用活动中的
    getSharedReferences
    vs
    getPreferences
    时要小心。您可以阅读有关SharedReferences的更多信息,了解第一个选项-我想将其传递给第三个活动,如果使用您的代码,它会传递给第三个活动,然后第二个活动开始,然后第三个活动?将字符串传递给Middleton活动中的最后一个活动我知道,如果在A和C之间有多个活动,然后您必须通过所有活动进行编写,因此我想知道是否还有其他简短的方法。对于每个活动,您只需添加一行
    intent.putExtras(getIntent())
    ,如果您认为这不是一个好的解决方案,那么您可以使用
    SharedReferences
    。但在我看来,我将坚持通过intent发送数据,因为我们不需要保存任何持久数据。这取决于你!