【问题标题】:TextChangedListener Crashes on MeTextChangedListener 在我身上崩溃
【发布时间】:2014-03-30 22:29:43
【问题描述】:

我试图仅在填充表单中的每个字段后启用一个按钮。为此,我正在使用 TextWatcher,但我不断收到错误消息。

这可能与我的 contentView 是 activity_add_grade 而我的按钮和字段位于我的 fragment_add_grade xml 中有关吗?我是新手,而且我不完全理解为什么两个 xml 文件都是由 ADT 自动生成的。

代码:

public class AddClass extends ActionBarActivity {

int baseYear=2005;
int thisYear = Calendar.getInstance().get(Calendar.YEAR);
DBAdapter db = new DBAdapter(this);

private EditText editText1;
private EditText editText2;

public TextWatcher watcher = new TextWatcher(){

    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        checkFieldsForEmptyValues();
    }

    @Override
    public void afterTextChanged(Editable editable) {
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_grade);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }

    editText1 = (EditText) findViewById(R.id.editTitle);
    editText2 = (EditText) findViewById(R.id.editCredit);

    // Program aborts as soon as I try to add the listener to editText1
    editText1.addTextChangedListener(watcher);
    editText2.addTextChangedListener(watcher);

}

还有我的 LogCat:

03-30 18:23:44.963: E/AndroidRuntime(1961): FATAL EXCEPTION: main
03-30 18:23:44.963: E/AndroidRuntime(1961): Process: com.NsouthProductions.gradetrackerpro, PID: 1961
03-30 18:23:44.963: E/AndroidRuntime(1961): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.NsouthProductions.gradetrackerpro/com.NsouthProductions.gradetrackerpro.AddClass}: java.lang.NullPointerException
03-30 18:23:44.963: E/AndroidRuntime(1961):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at android.os.Handler.dispatchMessage(Handler.java:102)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at android.os.Looper.loop(Looper.java:136)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at android.app.ActivityThread.main(ActivityThread.java:5017)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at java.lang.reflect.Method.invokeNative(Native Method)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at java.lang.reflect.Method.invoke(Method.java:515)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at dalvik.system.NativeStart.main(Native Method)
03-30 18:23:44.963: E/AndroidRuntime(1961): Caused by: java.lang.NullPointerException
03-30 18:23:44.963: E/AndroidRuntime(1961):     at com.NsouthProductions.gradetrackerpro.AddClass.onCreate(AddClass.java:63)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at android.app.Activity.performCreate(Activity.java:5231)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
03-30 18:23:44.963: E/AndroidRuntime(1961):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
03-30 18:23:44.963: E/AndroidRuntime(1961):     ... 11 more

【问题讨论】:

  • 可能是您的布局不包含 id。你能添加布局吗?

标签: java android android-layout nullpointerexception textwatcher


【解决方案1】:

您的 activity_add_grade 不包含 ID 为 editTitle 的 EditText

【讨论】:

    【解决方案2】:

    这里:

    editText1 = (EditText) findViewById(R.id.editTitle);
    

    看起来 findViewById 方法找不到具有此 id 的元素,因此它返回了null

    这就是为什么稍后会在这一行抛出 NullPointerException

    editText1.addTextChangedListener(watcher);
    

    ==> 将 id 属性 editTitle 添加到布局内的 EditText activity_add_grade

    【讨论】:

    • 当我创建我的 AddGrade(后来改为 AddClass)类时,Eclipse 自动为我提供了 activity_add_grade 和 fragment_add_grade XML 文件。我按照 android.com 的教程在 fragment_add_grade 中进行了 UI 设计(文本字段、按钮)。换句话说,我所有的 UI 都在 fragment_add_grade 中,所以将我的 editTitle 移动到 activity_add_grade 将意味着真正的重组。
    • 另外,我的 AddClass 类中有另一个方法可以访问 editTitle。为什么访问它没有问题? 'public void createNewClass(View v) { EditText titleTxt = (EditText)findViewById(R.id.editTitle);'
    • 如果您使用 Activity 的 findViewById 方法,它将查看您之前设置为内容视图的布局内部。如果您使用片段,那么您应该在片段中扩充片段的布局并在片段的布局中查找您的 EditText。
    猜你喜欢
    • 2012-02-08
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多