TextWatcher 导致崩溃
TextWatcher caused crash
这是 Android 开发的新手。
当我制作一个计算运动消耗的卡路里的应用程序时,我发现将 TextWatcher 添加到 EditText 会导致崩溃,即使我只将它添加到 "etEnergy"。
我搜索了很多关于崩溃的问题,但大多数都是在监听器中进行无限循环并通过删除监听器然后稍后将其添加回来解决。我添加了,但它不起作用。
当我找不到我在方法中创建的日志时,我在 Logcat 中找到了这条消息:
警告 ActivityManager(744): Activity ActivityRecord{41ea1128 u0 [package name]/.MainActivity t65 f}[= 暂停超时11=]
以下是MainActivity.java中的问题代码。没有他们我可以正确执行,但我需要他们来完成这个应用程序。
protected EditText etEnergy,etWeight,etTime;
protected TextView tvCals;
//double t,a; //don't make any sense in following code.
myTextWatch tw;
class myTextWatch implements TextWatcher{
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
etEnergy.removeTextChangedListener(this);
etWeight.removeTextChangedListener(this);
etTime.removeTextChangedListener(this);
Log.d("TextWatcher","TextChangedListenerRemoved");
etEnergy.addTextChangedListener(this);
etWeight.addTextChangedListener(this);
etTime.addTextChangedListener(this);
}
@Override
public void afterTextChanged(Editable s) {
}
}//end of class myTextWatch
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etEnergy=(EditText) findViewById(R.id.etEnergy);
etWeight=(EditText) findViewById(R.id.etWeight);
etTime=(EditText) findViewById(R.id.etTime);
etEnergy.addTextChangedListener(tw);
etWeight.addTextChangedListener(tw);
etTime.addTextChangedListener(tw);
tvCals=(TextView) findViewById(R.id.tvCals);
}
差点忘了说我正在使用 Android Studio 1.1.0 并且应用程序将 运行 在物理设备上,该设备是 Android 版本的 HTC Butterfly 4.4.2 应用的最低 API 等级为 14(IceCreamSandwich/4.0).
英语不是我的母语,但我会努力阅读任何回复。
感谢您的阅读。
也感谢您的回答!
试试这个
protected EditText etEnergy,etWeight,etTime;
protected TextView tvCals;
//double t,a; //don't make any sense in following code.
TextWatch tw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etEnergy=(EditText) findViewById(R.id.etEnergy);
etWeight=(EditText) findViewById(R.id.etWeight);
etTime=(EditText) findViewById(R.id.etTime);
etEnergy.addTextChangedListener(tw);
etWeight.addTextChangedListener(tw);
etTime.addTextChangedListener(tw);
tvCals=(TextView) findViewById(R.id.tvCals);
}
tw= new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
etEnergy.removeTextChangedListener(this);
etWeight.removeTextChangedListener(this);
etTime.removeTextChangedListener(this);
Log.d("TextWatcher","TextChangedListenerRemoved");
etEnergy.addTextChangedListener(this);
etWeight.addTextChangedListener(this);
etTime.addTextChangedListener(this);
}
@Override
public void afterTextChanged(Editable s) {
}
};//end of class myTextWatch
您的 EditText
似乎为空。请确保在 activity_main
布局中有 EditText
具有以下 ID:etEnergy, etWeight, etTime
附带说明 - 您实际上并不是在创建 myTextWatch
的新对象并试图在 addTextChangedListener(tw)
.
中传递 null
这是 Android 开发的新手。
当我制作一个计算运动消耗的卡路里的应用程序时,我发现将 TextWatcher 添加到 EditText 会导致崩溃,即使我只将它添加到 "etEnergy"。
我搜索了很多关于崩溃的问题,但大多数都是在监听器中进行无限循环并通过删除监听器然后稍后将其添加回来解决。我添加了,但它不起作用。
当我找不到我在方法中创建的日志时,我在 Logcat 中找到了这条消息:
警告 ActivityManager(744): Activity ActivityRecord{41ea1128 u0 [package name]/.MainActivity t65 f}[= 暂停超时11=]
以下是MainActivity.java中的问题代码。没有他们我可以正确执行,但我需要他们来完成这个应用程序。
protected EditText etEnergy,etWeight,etTime;
protected TextView tvCals;
//double t,a; //don't make any sense in following code.
myTextWatch tw;
class myTextWatch implements TextWatcher{
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
etEnergy.removeTextChangedListener(this);
etWeight.removeTextChangedListener(this);
etTime.removeTextChangedListener(this);
Log.d("TextWatcher","TextChangedListenerRemoved");
etEnergy.addTextChangedListener(this);
etWeight.addTextChangedListener(this);
etTime.addTextChangedListener(this);
}
@Override
public void afterTextChanged(Editable s) {
}
}//end of class myTextWatch
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etEnergy=(EditText) findViewById(R.id.etEnergy);
etWeight=(EditText) findViewById(R.id.etWeight);
etTime=(EditText) findViewById(R.id.etTime);
etEnergy.addTextChangedListener(tw);
etWeight.addTextChangedListener(tw);
etTime.addTextChangedListener(tw);
tvCals=(TextView) findViewById(R.id.tvCals);
}
差点忘了说我正在使用 Android Studio 1.1.0 并且应用程序将 运行 在物理设备上,该设备是 Android 版本的 HTC Butterfly 4.4.2 应用的最低 API 等级为 14(IceCreamSandwich/4.0).
英语不是我的母语,但我会努力阅读任何回复。
感谢您的阅读。 也感谢您的回答!
试试这个
protected EditText etEnergy,etWeight,etTime;
protected TextView tvCals;
//double t,a; //don't make any sense in following code.
TextWatch tw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etEnergy=(EditText) findViewById(R.id.etEnergy);
etWeight=(EditText) findViewById(R.id.etWeight);
etTime=(EditText) findViewById(R.id.etTime);
etEnergy.addTextChangedListener(tw);
etWeight.addTextChangedListener(tw);
etTime.addTextChangedListener(tw);
tvCals=(TextView) findViewById(R.id.tvCals);
}
tw= new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
etEnergy.removeTextChangedListener(this);
etWeight.removeTextChangedListener(this);
etTime.removeTextChangedListener(this);
Log.d("TextWatcher","TextChangedListenerRemoved");
etEnergy.addTextChangedListener(this);
etWeight.addTextChangedListener(this);
etTime.addTextChangedListener(this);
}
@Override
public void afterTextChanged(Editable s) {
}
};//end of class myTextWatch
您的 EditText
似乎为空。请确保在 activity_main
布局中有 EditText
具有以下 ID:etEnergy, etWeight, etTime
附带说明 - 您实际上并不是在创建 myTextWatch
的新对象并试图在 addTextChangedListener(tw)
.