【问题标题】:Android EditText gives nullpointerAndroid EditText 给出空指针
【发布时间】:2014-05-13 04:01:34
【问题描述】:

当我尝试运行我的应用程序时出现错误。 我希望有人能指出我正确的方向

这是我的问题开始的地方(第 73 行):

USER_ID_TMP = userIdtext2.getText().toString();

更长的代码sn-p:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tab1);
    Log.i("tabs", "CurrentTab is: 1");

    DB_NAME_AND_PATH = Tab1.this.getDatabasePath(DB_NAME);
    Log.d("Haze", "DB_NAME_AND_PATH: "+DB_NAME_AND_PATH);

    listView = (ListView) findViewById(R.id.listViewer);
    Button copyDbButton = (Button)findViewById(R.id.copydbbutton);
    Button readDbButton = (Button)findViewById(R.id.readdbbutton);
    final EditText userIdtext= (EditText) findViewById(R.id.userIDtextBox);
    EditText userIdtext2= (EditText) findViewById(R.id.userIDtextBox);

    if(fileFound){
        Log.d("Haze", "Filefound...........");
      readDbButton.setEnabled(false);
    }else{
      Log.d("Haze", "FileNotfound...........");
      fileFound = checkFileOnCreate(DB_NAME_AND_PATH);
      readDbButton.setEnabled(true);
    }

    USER_ID_TMP = userIdtext2.getText().toString();
    Log.d("Haze", "USER_ID_TMP: "+USER_ID_TMP);
    USER_ID = USER_ID_TMP.toUpperCase();

    final TextWatcher watcher= new TextWatcher() {
      public void afterTextChanged(Editable s) {
            if (userIdtext.getText().toString().equals("")) {
              userIdtext.setBackgroundColor(getResources().getColor(android.R.color.white));
        userIdtext.setTextColor(getResources().getColor(android.R.color.black));
            }

错误信息:

05-13 03:43:08.778    2079-2079/com.androidexample.tabbar D/Haze﹕ FileNotfound...........
05-13 03:43:08.800    2079-2079/com.androidexample.tabbar D/AndroidRuntime﹕ Shutting down VM
05-13 03:43:08.800    2079-2079/com.androidexample.tabbar W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x409961f8)
05-13 03:43:08.828    2079-2079/com.androidexample.tabbar E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidexample.tabbar/com.androidexample.tabbar.TabBar}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidexample.tabbar/com.androidexample.tabbar.Tab1}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
            at android.app.ActivityThread.access$600(ActivityThread.java:122)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4340)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidexample.tabbar/com.androidexample.tabbar.Tab1}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
            at android.app.ActivityThread.startActivityNow(ActivityThread.java:1796)
            at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
            at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
            at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:682)
            at android.widget.TabHost.setCurrentTab(TabHost.java:346)
            at android.widget.TabHost.addTab(TabHost.java:236)
            at com.androidexample.tabbar.TabBar.onCreate(TabBar.java:43)
            at android.app.Activity.performCreate(Activity.java:4465)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
            at android.app.ActivityThread.access$600(ActivityThread.java:122)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4340)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.androidexample.tabbar.Tab1.onCreate(Tab1.java:73)
            at android.app.Activity.performCreate(Activity.java:4465)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
            at android.app.ActivityThread.startActivityNow(ActivityThread.java:1796)
            at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
            at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
            at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:682)
            at android.widget.TabHost.setCurrentTab(TabHost.java:346)
            at android.widget.TabHost.addTab(TabHost.java:236)
            at com.androidexample.tabbar.TabBar.onCreate(TabBar.java:43)
            at android.app.Activity.performCreate(Activity.java:4465)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
            at android.app.ActivityThread.access$600(ActivityThread.java:122)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4340)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
            at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • EditTexttab1.xml中的其他人吗?
  • 能否请您发布您的活动完整代码?
  • 可能,userIdtext2.getText() 值为空。 userIdtext2.getText().toString() 引用的 null.toString() 返回 NPE。
  • final EditText userIdtext= (EditText) findViewById(R.id.**userIDtextBox**); EditText userIdtext2= (EditText) findViewById(R.id.**userIDtextBox**); 相同 ID ???
  • 我认为你复制了EditText userIdtext= (EditText) findViewById(R.id.userIDtextBox);

标签: java android android-edittext


【解决方案1】:

您已使用 tab1 布局通过使用设置视图 setContentView(R.layout.tab1);

并使用此行中的 id userIDtextBox 初始化 userIdtext2 EditText userIdtext2= (EditText) findViewById(R.id.userIDtextBox);

然后通过以下代码获取 userIdtext2 的值

USER_ID_TMP = userIdtext2.getText().toString();

所以检查 id 是否 R.id.userIDtextBox 在布局 R.layout.tab1 中是否可用

【讨论】:

  • 您好,感谢您的意见。当然这个EditText的名字不是“userIDtextBox”......复制粘贴错误......名字是“edittextbox”......我的愚蠢命名:)再次感谢
【解决方案2】:

检查您的 userIdtext2.getText() 是否为空。如果不为空,则使用 userIdtext2.getText().toString()

因为已知对空对象使用 toString() 会导致 NPE

参考:Convert null object to String

【讨论】:

    【解决方案3】:

    我猜你的问题出在这一行

    USER_ID = USER_ID_TMP.toUpperCase();
    

    因为user_id_temp 不包含任何内容,所以当您尝试将其转换为大写时,因为它不包含任何内容,这就是它抛出exception 的原因。尝试使用一些初始输入或注释它,然后尝试。

    【讨论】:

      【解决方案4】:

      更新您的EditText ID(这里两者相同)

       final EditText userIdtext= (EditText) findViewById(R.id.userIDtextBox1);
       EditText userIdtext2= (EditText) findViewById(R.id.userIDtextBox2);
      

      可能是USER_ID_TMP = userIdtext2.getText().toString();中的其他问题

      getText(); 中找不到任何内容

      所以首先你必须setText("");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-03
        • 2014-05-07
        • 2012-05-31
        • 1970-01-01
        • 1970-01-01
        • 2019-05-20
        相关资源
        最近更新 更多