繁体   English   中英

使用意图将价值从一项活动传递到另一项活动

[英]Passing value from one activity to another using intent

我正在制作一个有两个屏幕的应用程序; 屏幕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
  }
}  );

更改

i.putExtra(mobileno1, mobileno1);

i.putExtra("mobileno1", mobileno1);

您必须传递键值对。 您也正在键中传递mobileno1的值。 因此,您无法使用key =“ mobileno1”来检索它

为了避免使用空指针,请使用以下命令:

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

希望清楚:)

编辑:

如果要执行这样的代码,请确保在调用setText之前添加TextChangedListener

例:

这段代码对我不起作用:

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

希望能帮助到你。

在屏幕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:您直接在intent中而不是在bundle中设置数据,因此,应直接从intent中获取数据。

代码应该看起来像

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM