2013-10-15 13 views
-2

У меня есть исключение nullpointer при добавлении данных в базу данных. Мой файл Java наклеен здесь,Получение исключения null указателя при добавлении данных в базу данных

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.register); 
    findViewById(); 

    btnSave.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      if(!etPassword.getText().toString().equals(etConfPassword.getText().toString())){ 
       displayToast("Please confirm Password"); 
      }else if(etUserName.getText().toString().equals("")){ 
       displayToast("Please enter Login ID"); 
      }else if(etPassword.getText().toString().equals("")){ 
       displayToast("Please enter Password"); 
      }else if(isExisting(etFirstName.getText().toString(), "loginId", "UserDetails")){ 
       displayToast("This User already exist"); 
      }else{ 
        handleDB(); 
        finish(); 
        startActivity(new Intent(getApplicationContext(), Replay.class)); 
      } 
     }  
    });  
} 
private void handleDB() { 
    try { 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put("firstName", etFirstName.getText().toString()); 
     contentValues.put("lastName", etLastName.getText().toString()); 
     contentValues.put("loginId", etUserName.getText().toString()); 
     contentValues.put("password", etPassword.getText().toString()); 
     contentValues.put("cofmPassword", etConfPassword.getText().toString()); 
     contentValues.put("emailAddress", etEmailAddress.getText().toString()); 
     Replay.database.insert("UserDetails", null, contentValues); 
    } catch(SQLiteException se){ 
     Log.e(getClass().getSimpleName(), "Could not create or Open the database");}} 
     private void displayToast(String msg){ 
     Toast.makeText(getBaseContext(), msg, Toast.LENGTH_SHORT).show(); 
    } 
private void findViewById(){ 
    etFirstName = (EditText) findViewById(R.id.FName); 
    etLastName = (EditText) findViewById(R.id.LName); 
    etUserName = (EditText) findViewById(R.id.LoginId); 
    etPassword = (EditText) findViewById(R.id.Password); 
    etConfPassword = (EditText) findViewById(R.id.ConfPassword); 
    etEmailAddress = (EditText) findViewById(R.id.Email); 
    btnSave = (Button)findViewById(R.id.btnSave); 
}}; 

и журнал ошибок

10-15 08:51:55.932: E/AndroidRuntime(606): FATAL EXCEPTION: main 
10-15 08:51:55.932: E/AndroidRuntime(606): java.lang.NullPointerException 
10-15 08:51:55.932: E/AndroidRuntime(606): at com.GenioCode.replay.Register$1.onClick(Register.java:38) 
10-15 08:51:55.932: E/AndroidRuntime(606): at android.view.View.performClick(View.java:4204) 
10-15 08:51:55.932: E/AndroidRuntime(606): at android.view.View$PerformClick.run(View.java:17355) 

После компиляции базы данных создается без какого-либо содержания. Пожалуйста, помогите мне определить ошибку ..

+0

какой код написан на линии 38? – Rahil2952

+0

Что у вас есть в строке 38 (com.GenioCode.replay.Register $ 1.onClick (Register.java:38)? – cristianchiess

+0

где вы инициализировали 'btnSave', он должен быть инициализирован после' setContentView() '. –

ответ

0

В этом блоке кода:

if(!etPassword.getText().toString().equals(etConfPassword.getText().toString())){ 
         displayToast("Please confirm Password"); 
        }else if(etUserName.getText().toString().equals("")){ 
         displayToast("Please enter Login ID"); 
}else if(etPassword.getText().toString().equals("")){ 
         displayToast("Please enter Password"); 
}else if(isExisting(etFirstName.getText().toString(), "loginId", "UserDetails")){ 
         displayToast("This User already exist"); 

Вы не в состоянии проверить заранее ли:

(etPassword != null) && (etConfPassword != null) && 
(etUserName != null) && (etFirstName != null); 

Если какой-либо из этих полей нулевой вы» Вы получите исключение nullpointer.
Вы должны сначала проверить эти условия или какие-либо другие усилия, гарантирующие, что до достижения этой точки все соответствующие переменные гарантированно будут не равными нулю.

Просто preinitializing их

String etPassword = ""; 

будет делать трюк.
Это одна из тех неприятных вещей о Java. Во многих других языках строки начинаются как пустая строка, а не как null.

Смежные вопросы