我正在制作一个应用程序,其中我已经拍摄了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
}
} );
答案 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)
, 改变
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");
}