【问题标题】:pass two strings from one activity to another将两个字符串从一个活动传递到另一个活动
【发布时间】:2013-11-09 09:08:50
【问题描述】:

我正在为安卓开发一个井字游戏应用程序。在两个玩家部分,我创建了一个活动,要求两个玩家输入他们的名字。为此,我使用了两个EditTexts。问题是我的应用程序在开始下一个活动时关闭。这是我的代码:

//Activity 1:
    EditText player1field,player2field;
    Button startbutton;
    Intent startbuttonintent;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.single_options);
    setupActionBar();
    player1field = (EditText) findViewById(R.id.player1field);
    player2field = (EditText) findViewById(R.id.player2field);
    startbuttonintent = new Intent(this, Activity2.class);
    startbutton.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v) {

            String player1name = player1field.getText().toString();
            String player2name = player2field.getText().toString();
            startbuttonintent.putExtra("PLAYER1NAME",player1name);
            startbuttonintent.putExtra("PLAYER2NAME",player2name);
            startActivity(startbuttonintent);
        }
    });
}

这是活动2

//Activity2
Intent startbuttonintent = getIntent();
TextView p1name,p2name;
    public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_3m);

    String player1name = startbuttonintent.getStringExtra("PLAYER1NAME");
    String player2name = startbuttonintent.getStringExtra("PLAYER2NAME");
    p1name = (TextView) findViewById(R.id.p1name);
    p2name = (TextView) findViewById(R.id.p2name);
    p1name.setText(player1name);
    p2name.setText(player2name);
}

此代码没有给我任何错误,但是当我运行它时我的应用程序强制关闭。 请帮我。 提前致谢。

【问题讨论】:

  • 使用 putExtra 到 Intent
  • 为什么不能传HashMap或者Array
  • @MT8 我没听明白。
  • @ChinmayDabke 请看我的回答!!!!!!!!!
  • 试试这个方法 getIntent().getStringExtra("PLAYER1NAME"); getIntent().getStringExtra("PLAYER2NAME");

标签: java android android-studio


【解决方案1】:

试试这个:

活动 1:

    EditText player1field,player2field;
    Button startbutton;
    Intent startbuttonintent;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.single_options);
    setupActionBar();
    player1field = (EditText) findViewById(R.id.player1field);
    player2field = (EditText) findViewById(R.id.player2field);        
    startbutton.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v) {

            String player1name = player1field.getText().toString();
            String player2name = player2field.getText().toString();
            startbuttonintent = new Intent(this, Activity2.class);
            startbuttonintent.putExtra("PLAYER1NAME",player1name);
            startbuttonintent.putExtra("PLAYER2NAME",player2name);
            startActivity(startbuttonintent);
        }
    });
}

您在 onclick 之前调用了此方法,导致错误。

然后像这样获取意图文本:

//Activity2

TextView p1name,p2name;
  public void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_3m);
  Bundle extras = getIntent().getExtras();
  String player1name = extras.getString("PLAYER1NAME");
  String player2name = extras.getString("PLAYER2NAME");
  p1name = (TextView) findViewById(R.id.p1name);
  p2name = (TextView) findViewById(R.id.p2name);
  p1name.setText(player1name);
  p2name.setText(player2name);
}

【讨论】:

    【解决方案2】:
    String intArray[] = {"one","two"};
    Intent in = new Intent(this, B.class);
    in.putExtra("my_array", intArray);
    startActivity(in);
    

    阅读:

    Bundle extras = getIntent().getExtras();
    String[] arrayInB = extras.getStringArray("my_array");
    

    【讨论】:

      【解决方案3】:

      带你去getIntent方法里面onCreate方法

      //活动2

      TextView p1name,p2name;
          public void onCreate(Bundle savedInstanceState)
      {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_3m);
          Intent startbuttonintent = getIntent();
      
          String player1name = startbuttonintent.getStringExtra("PLAYER1NAME");
          String player2name = startbuttonintent.getStringExtra("PLAYER2NAME");
          p1name = (TextView) findViewById(R.id.p1name);
          p2name = (TextView) findViewById(R.id.p2name);
          p1name.setText(player1name);
          p2name.setText(player2name);
      }
      

      【讨论】:

        【解决方案4】:

        Intent startbuttonintent = getIntent(); 移动到您的onCreate() 方法中

        getIntent()Activity中的方法,所以不能在静态类级初始化中调用。只有在 Activity 对象准备好后才能调用它,例如在 onCreate() 方法中时

        【讨论】:

          【解决方案5】:

          @Chinmay Dabke 请获取按钮“startbutton”的id

          通过使用

          startbutton = (Button)findviewbyId(R.id.startbutton);
          

          【讨论】:

          • 是的,我已经做到了。忘了在我的问题中添加它。
          • 您能否提供在强制关闭时打印的日志
          【解决方案6】:

          试试这个......在Activity1

          Bundle bundle = new Bundle();
          bundle .putString("PLAYER1NAME",player1name);
          bundle .putString("PLAYER2NAME",player2name);
          intent1.putExtras(bundle);
          

          Activity2

          Bundle b = getArguments();
          String player1name = b.getString("PLAYER1NAME");
          String player2name = b.getString("PLAYER2NAME");
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-29
            • 1970-01-01
            • 2017-02-09
            • 2012-11-17
            • 2013-01-12
            • 2017-12-10
            相关资源
            最近更新 更多