2013-12-01 5 views
5

Im нового в Android ... когда я нажимаю кнопку назад он дает мне ошибку ниже ... 12-01 11:10:07.952: E/AndroidRuntime(3171): FATAL EXCEPTION: main 12-01 11:10:07.952: E/AndroidRuntime(3171): java.lang.RuntimeException: Unable to destroy activity {com.example.IranNara/com.example.IranNara.FirstPage}: java.lang.NullPointerException 12-01 11:10:07.952: E/AndroidRuntime(3171): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3655) 12-01 11:10:07.952: E/AndroidRuntime(3171): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3673) 12-01 11:10:07.952: E/AndroidRuntime(3171): at android.app.ActivityThread.access$2900(ActivityThread.java:125) 12-01 11:10:07.952: E/AndroidRuntime(3171): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 12-01 11:10:07.952: E/AndroidRuntime(3171): at android.os.Handler.dispatchMessage(Handler.java:99) 12-01 11:10:07.952: E/AndroidRuntime(3171): at android.os.Looper.loop(Looper.java:123) 12-01 11:10:07.952: E/AndroidRuntime(3171): at android.app.ActivityThread.main(ActivityThread.java:4627) 12-01 11:10:07.952: E/AndroidRuntime(3171): at java.lang.reflect.Method.invokeNative(Native Method) 12-01 11:10:07.952: E/AndroidRuntime(3171): at java.lang.reflect.Method.invoke(Method.java:521) 12-01 11:10:07.952: E/AndroidRuntime(3171): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 12-01 11:10:07.952: E/AndroidRuntime(3171): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 12-01 11:10:07.952: E/AndroidRuntime(3171): at dalvik.system.NativeStart.main(Native Method) 12-01 11:10:07.952: E/AndroidRuntime(3171): Caused by: java.lang.NullPointerException 12-01 11:10:07.952: E/AndroidRuntime(3171): at com.example.IranNara.FirstPage.onDestroy(FirstPage.java:133) 12-01 11:10:07.952: E/AndroidRuntime(3171): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3642) Невозможно уничтожить активность Ошибка

и мой код активность:

Button Nara; 
SQLiteDatabase mydb; 
String Text=""; 
//private static String DBNAME = "PDA";  
private static String TABLE = "Users"; 
public static Integer StartFlag; 
//LinearLayout linearL; 
//public static String storedPersonelNo = ""; 

@Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.first_xml);     
     Nara = (Button)findViewById(R.id.btnNara); 
     StartFlag =0; 

     final NaraAdapter mydb = new NaraAdapter(this);   
     mydb.createDatabase();  
     mydb.open(); 
     //System.out.println("My DB is:::: "+mydb); 


     //For Login 
     final Dialog dialog = new Dialog(FirstPage.this); 
     dialog.setContentView(R.layout.login); 
     dialog.setTitle("Login"); 
     final EditText editTextUserName=(EditText)dialog.findViewById(R.id.editTextUserNameToLogin); 
     final EditText editTextPassword=(EditText)dialog.findViewById(R.id.editTextPasswordToLogin); 

    //----------for entering on Exit Button------------------------------------------------------------------------------------------ 
     if(getIntent().getBooleanExtra("Exit", false)){ 
      finish(); 
      return; 
     } 
    //-----------------------------------------------------------------------------------------------------------------------//********click on IranNara Button 


Nara.setOnClickListener(new View.OnClickListener() { 

       //Click on Cancel Button 
       public void onClick(View v) 
       {  
        Button btnLogin=(Button)dialog.findViewById(R.id.buttonLogin); 
        Button Cancel = (Button)dialog.findViewById(R.id.btncancel); 
        dialog.show(); 

        Cancel.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
         dialog.dismiss(); 
         editTextPassword.setText("") ; 
        }}); 


        //Click on Login Button 
        btnLogin.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
         // get The User name and Password 
         String userName=editTextUserName.getText().toString(); 
         String password=editTextPassword.getText().toString(); 
         // fetch the Password 

         String storedPassword = getSinlgeEntry(userName,1); 
         System.out.println("storedPassword:"+storedPassword); 

         // check if the Stored password matches with Password entered by user 
         if(password.equals(storedPassword)) 
         { 
          Toast.makeText(FirstPage.this, "Congrats: Login Successfull", Toast.LENGTH_LONG).show(); 
          // Entered to Messages 
          String storedPersonelNo = getSinlgeEntry(userName,2); 
          Intent Startmain = new Intent(FirstPage.this, Main.class); 
          Startmain.putExtra("PersonelNumber", storedPersonelNo); 
          // SharedPreferences settings = getSharedPreferences(storedPersonelNo, 0); 
          dialog.dismiss(); 
          StartFlag=1; 
          startActivityForResult(Startmain, 0);       
         } 
         else 
         { 
          Toast.makeText(FirstPage.this, "User Name or Password does not match", Toast.LENGTH_LONG).show(); 
          } 
         } 
        }); 
       } 
      });  


} 

// - -------------------------------------------------- ----------------- -------------------------------- МЕТОДЫ -------------------------------------------------- -----------------------------

public String getSinlgeEntry(String userName,Integer n) 
{ 
    NaraDatabaseHandler DH = new NaraDatabaseHandler(this);   
    mydb = DH.getReadableDatabase(); 
    //System.out.println("My DB is:::: "+mydb); 
    Cursor cursor=mydb.query(TABLE, null, " UserName=?", new String[]{userName}, null, null, null); 
    if(cursor.getCount()<1) 
    { 
     cursor.close(); 
     return "NOT EXIST"; 
    } 
    cursor.moveToFirst(); 
    if (n==1){ 
    Text= cursor.getString(cursor.getColumnIndex("Password"));} 
    if(n==2){ 
    Text= cursor.getString(cursor.getColumnIndex("PersonelNo"));} 
    cursor.close(); 

    return Text; 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    mydb.close(); 
    //StartFlag = null; 

}` 

ответ

4

Когда password не равна storedPassword то mydb экземпляр является недействительным, и вы пытаетесь вызвать close() метод так поставил NULL проверку перед вызовом закрыть() в onDestroy:

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    if(null !=mydb) 
     mydb.close(); 
    //StartFlag = null; 

} 
1

похоже s, как mydb, уже имеет значение null, когда вы пытаетесь закрыть его в методе onDestroy. Попробуйте это:

@Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     if(mydb != null) 
      mydb.close(); 


    } 

Bw вы должны открыть и закрыть БД в методе getSinlgeEntry. Вам не нужно, чтобы закрыть его в OnDestroy

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