android - 使用 Intent 将值(value)从一项 Activity 传递到另一项 Activity

标签 android android-intent

我正在制作一个应用程序,其中我已经进行了 2 个屏幕;屏幕 A 和屏幕 B。在这两个屏幕中,我都使用了编辑文本和 TextView 。

在屏幕 A 的编辑文本中,我获取手机号码,通过单击 TextView 将其发送到屏幕 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,它工作正常,并且我能够在控制台中看到系统输出。

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

希望对您有所帮助。

关于android - 使用 Intent 将值(value)从一项 Activity 传递到另一项 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24626722/

相关文章:

Android 在调用创建新联系人 Activity 时避免将联系人保存到

android - 根据 userId firebase 使用 picasso 获取图像

java - 更改Android中TextView的字体

android - 为什么我看到 : Unsatisfied constraints: CONNECTIVITY in JobScheduler debug info

java - 服务中的 EditText 值

android - 在 Android 中获取更新的联系人以进行联系人同步

javascript - 如何开始使用 HTML5、CSS、JavaScript 和 jquery 开发 Android 应用程序?

Android 5.x 快门速度

android - 多 Intent 处理由于方向改变

android - GCMIntentService 的 Intent Extras 未通过