绑定中的Android接收文本返回Null

时间:2017-09-22 04:48:24

标签: java android android-intent bundle

我是Android和Java的新手。我试图在一个活动中捕获值,并使用bundle将它们传递给另一个活动。捆绑创建好了。但是当我尝试在第二个活动中提取值时,我得到Null值。我究竟做错了什么? 主要活动

//Create the bundle
Bundle mybundle = new Bundle();
//Add your data to bundle
mybundle.putString("One",textOne);
mybundle.putString("Two",textTwo);
//Add the bundle to the intent
myIntent.putExtras(mybundle);
//Fire the second activity
startActivity(startIntent);

这是在第二个活动中获取文本的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle mybundle = getIntent().getExtras();
String myText1 = mybundle.getString("One");
String myText2 = mybundle.getString("Two");

行。我将分享我的所有代码。我正在尝试一个非常简单的程序来学习android。在第一个屏幕上输入两个数字一起添加。使用捆绑包在第二个屏幕上显示答案,将值从第一个屏幕传递到第二个屏幕。

主要活动

public class MainActivity extends AppCompatActivity {
EditText editNum1;
EditText editNum2;
Button addbutton;
@Override
protected void onCreate(Bundle savedInstanceState) {        
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editNum1 = (EditText) findViewById(R.id.editNum1);
editNum2 = (EditText) findViewById(R.id.editNum2);
Button addbutton = (Button) findViewById(R.id.button);
addbutton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Intent myIntent = new Intent(MainActivity.this, 
AddActivity.class);
final String textOne = editNum1.getText().toString().trim();
final String textTwo = editNum2.getText().toString().trim();
//Create the bundle
   Bundle mybundle = new Bundle();
//Add your data to bundle
 mybundle.putString("One",textOne);
 mybundle.putString("Two",textTwo);
//Add the bundle to the intent
 myIntent.putExtras(mybundle);
//Fire the second activity
startActivity(myIntent);

确定现在AddActivity屏幕的代码我插入了一些不起作用的调试行

public class AddActivity extends AppCompatActivity {
    Number gNum1;
    Number gNum2;
    Number total;
    String myText1;
    String myText2;
    TextView textView;
    TextView textView2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle mybundle = getIntent().getExtras();
    if (mybundle != null) {
        String myText1 = mybundle.getString("One");
        String myText2 = mybundle.getString("Two");
    }
    textView = (TextView)findViewById(R.id.textView);
    if (myText1 != null) {
        textView.setText(myText1);
    }else {
        textView.setText("FAILED");
    }

    textView2 = (TextView)findViewById(R.id.textView2);
    if (myText1 != null) {
        textView2.setText(myText1);
    }else{
      textView2.setText("FAILED");

6 个答案:

答案 0 :(得分:2)

您需要在开始活动的意图中添加捆绑包。 请使用以下代码

startActivity(myIntent);

答案 1 :(得分:0)

您正在向myIntent添加捆绑,并且您传递了Bundle个不同的Intent intent(startIntent)

使用此

//Create the bundle
Bundle mybundle = new Bundle();
//Add your data to bundle
mybundle.putString("One",textOne);
mybundle.putString("Two",textTwo);
//Add the bundle to the intent
startIntent.putExtras(mybundle);
//Fire the second activity
startActivity(startIntent);

这是

的内容
//Create the bundle
Bundle mybundle = new Bundle();
//Add your data to bundle
mybundle.putString("One",textOne);
mybundle.putString("Two",textTwo);
//Add the bundle to the intent
myIntent.putExtras(mybundle);
//Fire the second activity
startActivity(startIntent);
  

注意:   如果您从TextviewEditext获得价值而不是

使用此

textOne.getText().toString().trim()

这是

的内容
textOne

答案 2 :(得分:0)

你把bundle放在myIntent中,但是你正在用startIntent开始你的活动,这就是你得到NULL的原因

答案 3 :(得分:0)

在创建包时的第一个活动中,将其添加到您想要开始活动的任何目的。

即在第一项活动中

//Create the bundle
Bundle mybundle = new Bundle();

//Add your data to bundle
mybundle.putString("One",textOne);
mybundle.putString("Two",textTwo);

//Add the bundle to the intent
myIntent.putExtras(mybundle);

//Fire the second activity with your bundle added intent
startActivity(myIntent);

然后在第二个活动中对bundle进行空检查,然后检索它

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Bundle mybundle = getIntent().getExtras();

if(mybundle!=null){
    String myText1 = mybundle.getString("One");
    String myText2 = mybundle.getString("Two");
}

答案 4 :(得分:0)

Bundle mybundle = new Bundle();
mybundle.putString("One",textOne);
mybundle.putString("Two",textTwo);
myIntent.putExtras(mybundle);
startActivity(myIntent);

使用myIntent而不是startIntent。由于您已将bundle添加到myIntent,因此无法访问由另一个Intent

调用的bundle活动

答案 5 :(得分:0)

您正在myIntent中添加捆绑包并使用startIntent启动Activity。因此请使用以下代码

startActivity(myIntent);

现在在另一个Activity上检查getIntent是否为null,然后从Intent中获取Bundle。