这是Android开发的新手。
虽然我制作的应用程序可以计算锻炼所消耗的卡路里,但我发现在EditText中添加TextWatcher会导致崩溃,即使我只是将其添加到" etEnergy"。
我已经搜索了许多关于崩溃的问题,但是大多数问题都是在侦听器中创建一个无限循环,并通过删除侦听器然后将其添加回来解决。我补充说,但它没有用。
当我无法找到我在该方法中创建的日志时,我在Logcat中发现了此消息:
警告ActivityManager(744):ActivityRecord的活动暂停超时{41ea1128 u0 [包名称] / .MainActivity t65 f}
以下是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和应用程序将在物理设备上运行,这是一个HTC Butterfly,Android版本是4.4.2,应用程序的最低API等级是14(IceCreamSandwich / 4.0)。
英语不是我的母语,但我会努力阅读任何回复。
感谢您的阅读。 也很感谢你的回答!
答案 0 :(得分: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
答案 1 :(得分:0)
您的EditText
似乎是空的。请确保在activity_main
布局中EditText
包含以下ID:etEnergy, etWeight, etTime
作为旁注 - 您实际上并未创建myTextWatch
的新对象,并尝试在addTextChangedListener(tw)
中传递null。