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