2013-08-26 53 views
-2

創建插入用戶名和密碼signup.java後,我的應用程序在登錄時(模擬器中)突然停止,並且我移至(bluestack)中的註冊頁面。不確定註冊時數據是否真的被輸入到數據庫中。嘗試登錄時應用程序突然停止

DBManager.java

package com.example.student_project; 

import com.example.student_project.*; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteOpenHelper; 


public class DBManager { 
    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_USERNAME = "username"; 
    public static final String KEY_PASSWORD = "password"; 


    private static final String DATABASE_NAME= "LOGIN.db"; 
    private static final int DATABASE_VERSION = 4; 
    private static final String DATABASE_TABLE = "LOGIN_TABLE"; 

    private static DbHelper ourHelper; 
    private final Context ourContext; 
    private static SQLiteDatabase ourDatabase; 

    class DbHelper extends SQLiteOpenHelper { 

     public DbHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
      // TODO Auto-generated constructor stub 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 

      // TODO Auto-generated method stub 
      db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
      KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT , " + 
      KEY_USERNAME + " TEXT NOT NULL , " + 
      KEY_PASSWORD + " TEXT NOT NULL);" 
      ); 
       } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      // TODO Auto-generated method stub 
      db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
      onCreate(db); 
     } 

    } 


    public DBManager(Context c) { 
    ourContext = c; 
    } 

    public DBManager open() throws SQLException{ 
     ourHelper = new DbHelper(ourContext); 
     try 
     { 
      ourDatabase = ourHelper.getWritableDatabase(); 
     } 
     catch(SQLException ex) 
     { 
      ourDatabase = ourHelper.getReadableDatabase(); 
     } 
     return this; 
    } 

    public void close() { 
     ourHelper.close(); 
    } 

    public long createEntry(String username, String password) throws SQLException 
    { 
     // TODO Auto-generated method stub 
     ContentValues cv = new ContentValues(); 
     cv.put(KEY_USERNAME, username); 
     cv.put(KEY_PASSWORD, password); 
     return ourDatabase.insert(DATABASE_TABLE, null, cv); 

    } 

    public static boolean verifyUser(String username , String password) 
    { 

     String columns[] = new String[2]; 
     columns[0] = username; 
     columns[1] = password; 
     Cursor c= null; 
     int count=0; 
     try 
     { 

       // TODO Auto-generated method stub 
       c = ourDatabase.query(DATABASE_TABLE, columns,null , null, null, null, null); 
       count = c.getCount(); 

     } 
     catch (SQLException e) 
     { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 
     finally 
     { 
      c.close(); 
     } 
     if(count>0) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 

    } 
} 

MainActivity.java

package com.example.student_project; 

import com.example.student_project.*; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.text.InputFilter.LengthFilter; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends Activity implements OnClickListener 
{ 
    private Button btn_signup; 
    private Button btn_login; 
    private EditText et_lusername; 
    private EditText et_lpassword; 

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

     Log.i("mytag","this is my tag"); 
     et_lusername = (EditText) findViewById(R.id.et_lusername); 
     et_lpassword = (EditText) findViewById(R.id.et_lpassword); 
     btn_signup = (Button) findViewById(R.id.btn_signup); 
     btn_login = (Button) findViewById(R.id.btn_login); 

     btn_login.setOnClickListener(this); 
     btn_signup.setOnClickListener(this); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 


    @Override 
    public void onClick(View v) 
    { 
     // TODO Auto-generated method stub 
     switch(v.getId()) 
     { 
      case R.id.btn_login : 
      { 
       String un = et_lusername.getText().toString(); 
       String pw = et_lusername.getText().toString(); 

       boolean success = DBManager.verifyUser(un,pw); 
       if (success) 
       { 
        Intent i = new Intent(MainActivity.this,AdminMenu.class); 
        startActivity(i); 
       } 
       else 
       { 
        Toast.makeText(getApplicationContext(), "wrong username or password",Toast.LENGTH_LONG); 
       } 


      } 
      case R.id.btn_signup: 
      { 
       Intent i = new Intent(MainActivity.this,Signup.class); 
       startActivity(i); 
      } 
     } 
    } 
    } 

Signup.java

package com.example.student_project; 


import com.example.student_project.*; 

import android.os.Bundle; 
import android.app.Activity; 
import android.app.Dialog; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Signup extends Activity implements OnClickListener { 
private Button btn_add; 
private EditText et_username; 
private EditText et_password; 
private EditText et_confirmpassword; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.signup); 

    et_username = (EditText) findViewById(R.id.et_username); 
    et_password = (EditText) findViewById(R.id.et_password); 
    et_confirmpassword = (EditText) findViewById(R.id.et_confirmpassword); 
    btn_add = (Button) findViewById(R.id.btn_add); 

    btn_add.setOnClickListener(this); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 

    return true; 
} 

@Override 
public void onClick(View v) 
{ 
    // TODO Auto-generated method stub 
    switch(v.getId()) 
    { 
    case R.id.btn_add : 

     boolean diditwork = true;   
     try 
     { 
      String username = et_username.getText().toString(); 
      String password = et_password.getText().toString(); 
      String cpassword = et_confirmpassword.getText().toString(); 

      if(password.equalsIgnoreCase(cpassword)) 
      { 
       DBManager empty = new DBManager(Signup.this); 
       empty.open(); 
       empty.createEntry(username,password); 
       empty.close(); 

       Intent addintent = new Intent(Signup.this,MainActivity.class); 
        startActivity(addintent); 
      } 
      else 
      { 
       Toast.makeText(getApplicationContext(), "passwords does not match", Toast.LENGTH_LONG); 
      } 
     } 
     catch (Exception e) 
     { 
      diditwork = false; 
      Dialog d = new Dialog(this); 
      String error = e.toString(); 
      d.setTitle("dang"); 
      TextView tv = new TextView(this); 
      tv.setText(error); 
      d.setContentView(tv); 
      d.show(); 
     } 
     /* finally 
     { 
      if(diditwork) 
      { 
      Dialog d = new Dialog(this); 
      d.setTitle("hech ya"); 
      TextView tv = new TextView(this); 
      tv.setText("success"); 
      d.setContentView(tv); 
      d.show(); 
      } 

     } */ 


    } 
} 

} 

Admin.java

package com.example.student_project; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 

public class AdminMenu extends Activity 
{ 

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



} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 
} 

logcat的錯誤

W/ActivityManager( 293): Unbind failed: could not find connection for [email protected] 

I/Choreographer(1994): Skipped 55 frames! The application may be doing too much work on its main thread. 

D/AndroidRuntime(1994): Shutting down VM 

W/dalvikvm(1994): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 

E/AndroidRuntime(1994): FATAL EXCEPTION: main 

E/AndroidRuntime(1994): java.lang.NullPointerException 

E/AndroidRuntime(1994): at com.example.student_project.DBManager.verifyUser(DBManager.java:110) 

E/AndroidRuntime(1994): at com.example.student_project.MainActivity.onClick(MainActivity.java:61) 

E/AndroidRuntime(1994): at android.view.View.performClick(View.java:4204) 

E/AndroidRuntime(1994): at android.view.View$PerformClick.run(View.java:17355) 

E/AndroidRuntime(1994): at android.os.Handler.handleCallback(Handler.java:725) 

E/AndroidRuntime(1994): at android.os.Handler.dispatchMessage(Handler.java:92) 

E/AndroidRuntime(1994): at android.os.Looper.loop(Looper.java:137) 

E/AndroidRuntime(1994): at android.app.ActivityThread.main(ActivityThread.java:5041) 

E/AndroidRuntime(1994): at java.lang.reflect.Method.invokeNative(Native Method) 

E/AndroidRuntime(1994): at java.lang.reflect.Method.invoke(Method.java:511) 

E/AndroidRuntime(1994): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 

E/AndroidRuntime(1994): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 

E/AndroidRuntime(1994): at dalvik.system.NativeStart.main(Native Method) 

W/ActivityManager( 293): Force finishing activity com.example.student_project/.MainActivity 

W/WindowManager( 293): Failure taking screenshot for (246x410) to layer 21020 
+2

這是這一行? DBManager.verifyUser(DBManager.java:110) –

+0

你想說什麼? –

回答

1

這是因爲你的Cursor c是null..andühave'nt陷入catchNullPointerExceptionverifyUser() ..change在漁獲SQLExceptionException捕獲所有異常。 。

+0

我不斷收到NullPointException。是否因爲數據(用戶名,密碼)沒有在註冊時插入到我的數據庫表中。我如何知道這是否是原因?我該如何解決它,並確保數據被插入? –

+0

調試'SignUp'類的'onClick()'。 – bakriOnFire

1

您正在調用DBManager.verifyUser(un,pw);,要求打開數據庫。可能ourDatabase變量是Null,並且在嘗試訪問空遊標時試圖獲取遊標和未處理時遇到異常。

也許你並不需要verifyUser蜂靜態,你需要調用DBManager.open之前