使用intent将值从一个活动传递到另一个活动

时间:2014-07-08 08:10:41

标签: android android-intent

我正在制作一个应用程序,其中我已经拍摄了2个屏幕;屏幕A和屏幕B.在两个屏幕中,我都采用了编辑文本和文本视图。

在屏幕A的编辑文本中,我正在使用手机号码,通过点击文本视图,我将其发送到屏幕B,并将其设置在屏幕B的编辑文本上。此过程正常运行。

这是我在屏幕A上的代码 -

    tvredeem.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
   // TODO Auto-generated method stub
   Intent i = new Intent(getApplicationContext(),
     RedeemPoints.class);
    i.putExtra(mobileno1, mobileno1);
   startActivity(i);
  }
 });

这是我在屏幕B上的代码 -

      mobileno = (EditText) findViewById(R.id.mobileno);
    Bundle bundle = getIntent().getExtras();
     String message = bundle.getString("mobileno1");
    mobileno.setText(message);

现在,问题是当我来到屏幕B的时候,它在这一行上给出了空指针异常 - mobileno.setText(message); 并且应用程序强制关闭。

什么'如果'当我进入屏幕B时,我应该使用它,它不会给出空指针异常,编辑文本应该是空白的。

当我直接进入屏幕B时,下面的代码应该可以工作。 当在屏幕B的editText上设置文本时,我想运行此代码......

 mobileno.addTextChangedListener(new TextWatcher() {

 @Override
  public void onTextChanged(CharSequence s, int start, int before,
 int count) {
// TODO Auto-generated method stub
String inputNo = s.toString();
if (inputNo.length() == 10) {
 getmobno = inputNo;     
  new Homedata().execute();     
 }   
 }

 @Override
 public void beforeTextChanged(CharSequence s, int start, int count,
  int after) {
 // TODO Auto-generated method stub
 }

 @Override
 public void afterTextChanged(Editable s) {
 // TODO Auto-generated method stub
  }
}  );

2 个答案:

答案 0 :(得分:2)

更改

i.putExtra(mobileno1, mobileno1);

i.putExtra("mobileno1", mobileno1);

您必须传递键值对。您也在密钥中传递mobileno1的值。因此,您无法使用key =“mobileno1”

检索它

要避免空指针,请使用:

if (getIntent().getStringExtra("mobileno1") != null) {
    edtnum.setText(getIntent().getStringExtra("mobileno1"));
}

希望明确:)

修改

如果您想执行这样的代码,请务必在致电TextChangedListener之前添加setText

示例:

此代码对我不起作用:

    setContentView(R.layout.activity_main);
    e = (EditText) findViewById(R.id.etext);
    e.setText(myString);
    e.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            System.out.println("on");
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            System.out.println("after");
        }
    });

但如果我稍后再调用setText添加textChangedListener,它就能正常运行,我可以在控制台中看到sysouts。

    setContentView(R.layout.activity_main);
    e = (EditText) findViewById(R.id.etext);

    e.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            System.out.println("on");
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            System.out.println("after");
        }
    });
    e.setText(myString);

希望它有所帮助。

答案 1 :(得分:0)

屏幕A中的

, 改变

i.putExtra(mobileno1, mobileno1);

i.putExtra("mobileno1", mobileno1);

和 在屏幕B中 改变

Bundle bundle = getIntent().getExtras();
String message = bundle.getString("mobileno1");

String message = getIntent().getStringExtra("mobileno1");

屏幕A: -

@Override
public void onClick(View v) {
  // TODO Auto-generated method stub
   Intent i = new Intent(getApplicationContext(),
   RedeemPoints.class);
   i.putExtra("mobileno1", mobileno1);
   startActivity(i);
 }

屏幕B: 你已经直接在意图中设置数据而不是捆绑,所以你应该从意图直接得到它。

代码应该看起来像

 String message ="";
if (getIntent().hasExtra("mobileno1")){
  message =getIntent().getStringExtra("mobileno1");
}