Android 应用程序在移动设备上停止工作,但在emmulator上运行

Android 应用程序在移动设备上停止工作,但在emmulator上运行,android,sqlite,Android,Sqlite,我开发了一个“银行模拟”应用程序,它使用sqlite创建数据库。。。 当我在手机上运行应用程序时,它会意外停止……我需要安装任何服务器才能在手机上运行基于sqlite的应用程序吗? 提前谢谢 DbHelper.java private static final String DATABASE_NAME = "saket.db"; private static final int DATABASE_VERSION = 1; public static final String SUBH_TABLE

我开发了一个“银行模拟”应用程序,它使用sqlite创建数据库。。。 当我在手机上运行应用程序时,它会意外停止……我需要安装任何服务器才能在手机上运行基于sqlite的应用程序吗? 提前谢谢

DbHelper.java

private static final String DATABASE_NAME = "saket.db";
private static final int DATABASE_VERSION = 1;
public static final String SUBH_TABLE_NAME = "login";
public static final String SUBH_TABLE_DATA = "TBL_Transaction";
public static final String KEY_ROWID = "_id";
private static final String SUBH_TABLE_CREATE =
                "CREATE TABLE " + SUBH_TABLE_NAME + "(" +
                "_id INTEGER PRIMARY KEY AUTOINCREMENT,"+
                "username TEXT NOT NULL, password TEXT NOT NULL, email TEXT NOT NULL, balance INTEGER);";
private static final String SUBH_TABLE_DATA_CREATE =
        "CREATE TABLE " + SUBH_TABLE_DATA + "(" +
        "trans_id INTEGER PRIMARY KEY AUTOINCREMENT, "+
        "user_id INTEGER, " +
        "trans TEXT NOT NULL);";

private static final String SAKET_DB_ADMIN = "INSERT INTO "+ SUBH_TABLE_NAME +" values(1, admin, password, admin@gmail.com);";
//private static final String SAKET_DB_ADMIN_Trans = "INSERT INTO "+ SUBH_TABLE_DATA +" values(1, asdf);";


public DbHelper(Context context) {

    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    System.out.println("In constructor");

}

/* (non-Javadoc)
 * @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
 */
@Override
public void onCreate(SQLiteDatabase db) {

    try{
        //Create Database
        db.execSQL(SUBH_TABLE_CREATE);

        //create transaction account
        db.execSQL(SUBH_TABLE_DATA_CREATE);

        //create admin account
        db.execSQL(SAKET_DB_ADMIN);

        //db.execSQL(SAKET_DB_ADMIN_Trans);

        System.out.println("In onCreate");
    }catch(Exception e){
        e.printStackTrace();
    }
}
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mNewUser = (Button) findViewById(R.id.buttonNewUser);
        mNewUser.setOnClickListener(this);

        mLogin = (Button) findViewById(R.id.buttonLogin);
        mLogin.setOnClickListener(this);

        mShowAll = (Button) findViewById(R.id.buttonShowAll);
        mShowAll.setOnClickListener(this);
    }

    public void onClick(View v) {

        switch (v.getId()) {

        case R.id.buttonLogin:
            mUsername = (EditText) findViewById(R.id.editUsername);
            mPassword = (EditText) findViewById(R.id.editPassword);

            String uname = mUsername.getText().toString();
            String pass = mPassword.getText().toString();

            if (uname.equals("") || uname == null) {
                Toast.makeText(getApplicationContext(), "Username Empty",
                        Toast.LENGTH_SHORT).show();
            } else if (pass.equals("") || pass == null) {
                Toast.makeText(getApplicationContext(), "Password Empty",
                        Toast.LENGTH_SHORT).show();
            } else {
                boolean validLogin = false;
                try {
                    validLogin = validateLogin(uname, pass,
                            DatabaseActivity.this);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if (validLogin) {
                    System.out.println("In Valid");
                    Intent i_login = new Intent(DatabaseActivity.this,
                            UserLoggedInPage.class);

                    try {
                        id = getID(uname, pass, DatabaseActivity.this);
                        Ubal = getBAL(uname, pass, DatabaseActivity.this);
                    } catch (NumberFormatException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    Log.d(TAG, "putting the extra          " + id);
                    i_login.putExtra("key", id);
                    i_login.putExtra("bkey", Ubal);
                    startActivity(i_login);
                    finish();
                }
            }
            break;

        case R.id.buttonNewUser:
            Intent i = new Intent(DatabaseActivity.this, NewUserActivity.class);
            startActivity(i);
            finish();
            break;

        case R.id.buttonShowAll:
            Intent i_admin = new Intent(DatabaseActivity.this, AdminPage.class);
            startActivity(i_admin);
            finish();
            break;
        }
    }

    public boolean validateLogin(String uname, String pass, Context context)
            throws Exception {

        myDb = new DbHelper(context);
        SQLiteDatabase db = myDb.getReadableDatabase();
        // SELECT
        String[] columns = { "_id" };

        // WHERE clause
        String selection = "username=? AND password=?";

        // WHERE clause arguments
        String[] selectionArgs = { uname, pass };

        Cursor cursor = null;
        try {
            // SELECT _id FROM login WHERE username = uname AND password=pass
            cursor = db.query(DbHelper.SUBH_TABLE_NAME, columns, selection,
                    selectionArgs, null, null, null);

            startManagingCursor(cursor);
        } catch (Exception e) {
            e.printStackTrace();
        }
        int numberOfRows = cursor.getCount();

        if (numberOfRows <= 0) {

            Toast.makeText(getApplicationContext(),
                    "Login Failed..\nTry Again", Toast.LENGTH_SHORT).show();
            return false;
        }

        return true;
    }

    // get rowid
    // public int getID(String uname, String pass, Context context)
    // throws Exception {
    //
    // myDb = new DbHelper(context);
    // SQLiteDatabase db = myDb.getReadableDatabase();
    // cursor = db.rawQuery("select * from " + DbHelper.SUBH_TABLE_NAME +
    // " where username = " + uname + "&" + "password = " + pass + ";)", null);
    // if (cursor != null) {
    // if(cursor.moveToFirst()){
    // int id = cursor.getInt(cursor.getColumnIndex(DbHelper.KEY_ROWID));
    // }
    //
    // }
    //
    // return id;
    //
    // }
    public String getID(String uname, String pass, Context context) {
        try {
            String idddd = null;
            SQLiteDatabase db = myDb.getReadableDatabase();

            String[] columns = { "_id" };

            // WHERE clause
            String selection = "username=? AND password=?";

            // WHERE clause arguments
            String[] selectionArgs = { uname, pass };

            Cursor cursor = db.query(DbHelper.SUBH_TABLE_NAME, columns,
                    selection, selectionArgs, null, null, null);
            if (cursor != null) {
                startManagingCursor(cursor);
                while (cursor.moveToNext()) {
                    idddd = cursor.getString(0);
                }
                return idddd;
            }
            System.out.println("Cursor NuLL");

        } catch (Exception e) {
            e.printStackTrace();
        } 
        return null;
    }

    private String getBAL(String uname, String pass,
            DatabaseActivity databaseActivity) {
        try {
            String ballll = null;
            SQLiteDatabase db = myDb.getReadableDatabase();

            String[] columns = { "balance" };

            // WHERE clause
            String selection = "username=? AND password=?";

            // WHERE clause arguments
            String[] selectionArgs = { uname, pass };

            Cursor cursor = db.query(DbHelper.SUBH_TABLE_NAME, columns,
                    selection, selectionArgs, null, null, null);
            if (cursor != null) {
                startManagingCursor(cursor);
                while (cursor.moveToNext()) {
                    ballll = cursor.getString(0);
                }
                return ballll;
            }
            System.out.println("Cursor NuLL");

        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    protected void onDestroy() {
        super.onDestroy();
        if (myDb != null && cursor != null ) {
            cursor.close();
            myDb.close();

        }

    }
}
DatabaseActivity.java

private static final String DATABASE_NAME = "saket.db";
private static final int DATABASE_VERSION = 1;
public static final String SUBH_TABLE_NAME = "login";
public static final String SUBH_TABLE_DATA = "TBL_Transaction";
public static final String KEY_ROWID = "_id";
private static final String SUBH_TABLE_CREATE =
                "CREATE TABLE " + SUBH_TABLE_NAME + "(" +
                "_id INTEGER PRIMARY KEY AUTOINCREMENT,"+
                "username TEXT NOT NULL, password TEXT NOT NULL, email TEXT NOT NULL, balance INTEGER);";
private static final String SUBH_TABLE_DATA_CREATE =
        "CREATE TABLE " + SUBH_TABLE_DATA + "(" +
        "trans_id INTEGER PRIMARY KEY AUTOINCREMENT, "+
        "user_id INTEGER, " +
        "trans TEXT NOT NULL);";

private static final String SAKET_DB_ADMIN = "INSERT INTO "+ SUBH_TABLE_NAME +" values(1, admin, password, admin@gmail.com);";
//private static final String SAKET_DB_ADMIN_Trans = "INSERT INTO "+ SUBH_TABLE_DATA +" values(1, asdf);";


public DbHelper(Context context) {

    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    System.out.println("In constructor");

}

/* (non-Javadoc)
 * @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
 */
@Override
public void onCreate(SQLiteDatabase db) {

    try{
        //Create Database
        db.execSQL(SUBH_TABLE_CREATE);

        //create transaction account
        db.execSQL(SUBH_TABLE_DATA_CREATE);

        //create admin account
        db.execSQL(SAKET_DB_ADMIN);

        //db.execSQL(SAKET_DB_ADMIN_Trans);

        System.out.println("In onCreate");
    }catch(Exception e){
        e.printStackTrace();
    }
}
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mNewUser = (Button) findViewById(R.id.buttonNewUser);
        mNewUser.setOnClickListener(this);

        mLogin = (Button) findViewById(R.id.buttonLogin);
        mLogin.setOnClickListener(this);

        mShowAll = (Button) findViewById(R.id.buttonShowAll);
        mShowAll.setOnClickListener(this);
    }

    public void onClick(View v) {

        switch (v.getId()) {

        case R.id.buttonLogin:
            mUsername = (EditText) findViewById(R.id.editUsername);
            mPassword = (EditText) findViewById(R.id.editPassword);

            String uname = mUsername.getText().toString();
            String pass = mPassword.getText().toString();

            if (uname.equals("") || uname == null) {
                Toast.makeText(getApplicationContext(), "Username Empty",
                        Toast.LENGTH_SHORT).show();
            } else if (pass.equals("") || pass == null) {
                Toast.makeText(getApplicationContext(), "Password Empty",
                        Toast.LENGTH_SHORT).show();
            } else {
                boolean validLogin = false;
                try {
                    validLogin = validateLogin(uname, pass,
                            DatabaseActivity.this);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if (validLogin) {
                    System.out.println("In Valid");
                    Intent i_login = new Intent(DatabaseActivity.this,
                            UserLoggedInPage.class);

                    try {
                        id = getID(uname, pass, DatabaseActivity.this);
                        Ubal = getBAL(uname, pass, DatabaseActivity.this);
                    } catch (NumberFormatException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    Log.d(TAG, "putting the extra          " + id);
                    i_login.putExtra("key", id);
                    i_login.putExtra("bkey", Ubal);
                    startActivity(i_login);
                    finish();
                }
            }
            break;

        case R.id.buttonNewUser:
            Intent i = new Intent(DatabaseActivity.this, NewUserActivity.class);
            startActivity(i);
            finish();
            break;

        case R.id.buttonShowAll:
            Intent i_admin = new Intent(DatabaseActivity.this, AdminPage.class);
            startActivity(i_admin);
            finish();
            break;
        }
    }

    public boolean validateLogin(String uname, String pass, Context context)
            throws Exception {

        myDb = new DbHelper(context);
        SQLiteDatabase db = myDb.getReadableDatabase();
        // SELECT
        String[] columns = { "_id" };

        // WHERE clause
        String selection = "username=? AND password=?";

        // WHERE clause arguments
        String[] selectionArgs = { uname, pass };

        Cursor cursor = null;
        try {
            // SELECT _id FROM login WHERE username = uname AND password=pass
            cursor = db.query(DbHelper.SUBH_TABLE_NAME, columns, selection,
                    selectionArgs, null, null, null);

            startManagingCursor(cursor);
        } catch (Exception e) {
            e.printStackTrace();
        }
        int numberOfRows = cursor.getCount();

        if (numberOfRows <= 0) {

            Toast.makeText(getApplicationContext(),
                    "Login Failed..\nTry Again", Toast.LENGTH_SHORT).show();
            return false;
        }

        return true;
    }

    // get rowid
    // public int getID(String uname, String pass, Context context)
    // throws Exception {
    //
    // myDb = new DbHelper(context);
    // SQLiteDatabase db = myDb.getReadableDatabase();
    // cursor = db.rawQuery("select * from " + DbHelper.SUBH_TABLE_NAME +
    // " where username = " + uname + "&" + "password = " + pass + ";)", null);
    // if (cursor != null) {
    // if(cursor.moveToFirst()){
    // int id = cursor.getInt(cursor.getColumnIndex(DbHelper.KEY_ROWID));
    // }
    //
    // }
    //
    // return id;
    //
    // }
    public String getID(String uname, String pass, Context context) {
        try {
            String idddd = null;
            SQLiteDatabase db = myDb.getReadableDatabase();

            String[] columns = { "_id" };

            // WHERE clause
            String selection = "username=? AND password=?";

            // WHERE clause arguments
            String[] selectionArgs = { uname, pass };

            Cursor cursor = db.query(DbHelper.SUBH_TABLE_NAME, columns,
                    selection, selectionArgs, null, null, null);
            if (cursor != null) {
                startManagingCursor(cursor);
                while (cursor.moveToNext()) {
                    idddd = cursor.getString(0);
                }
                return idddd;
            }
            System.out.println("Cursor NuLL");

        } catch (Exception e) {
            e.printStackTrace();
        } 
        return null;
    }

    private String getBAL(String uname, String pass,
            DatabaseActivity databaseActivity) {
        try {
            String ballll = null;
            SQLiteDatabase db = myDb.getReadableDatabase();

            String[] columns = { "balance" };

            // WHERE clause
            String selection = "username=? AND password=?";

            // WHERE clause arguments
            String[] selectionArgs = { uname, pass };

            Cursor cursor = db.query(DbHelper.SUBH_TABLE_NAME, columns,
                    selection, selectionArgs, null, null, null);
            if (cursor != null) {
                startManagingCursor(cursor);
                while (cursor.moveToNext()) {
                    ballll = cursor.getString(0);
                }
                return ballll;
            }
            System.out.println("Cursor NuLL");

        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    protected void onDestroy() {
        super.onDestroy();
        if (myDb != null && cursor != null ) {
            cursor.close();
            myDb.close();

        }

    }
}
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mNewUser=(按钮)findViewById(R.id.buttonNewUser);
mNewUser.setOnClickListener(这个);
mLogin=(按钮)findViewById(R.id.buttonLogin);
mLogin.setOnClickListener(这个);
mShowAll=(按钮)findviewbyd(R.id.buttonShowAll);
mShowAll.setOnClickListener(这个);
}
公共void onClick(视图v){
开关(v.getId()){
案例R.id.buttonLogin:
mUsername=(EditText)findViewById(R.id.editUsername);
mPassword=(EditText)findViewById(R.id.editPassword);
字符串uname=mUsername.getText().toString();
String pass=mPassword.getText().toString();
如果(uname.equals(“”| | uname==null){
Toast.makeText(getApplicationContext(),“用户名为空”,
吐司。长度(短)。show();
}else if(pass.equals(“”| | pass==null){
Toast.makeText(getApplicationContext(),“密码为空”,
吐司。长度(短)。show();
}否则{
布尔值validLogin=false;
试一试{
validLogin=validateLogin(取消、通过、,
数据库活动;
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
如果(有效登录){
System.out.println(“In-Valid”);
Intent i_login=新Intent(DatabaseActivity.this,
UserLoggedInPage.class);
试一试{
id=getID(uname、pass、DatabaseActivity.this);
Ubal=getBAL(uname、pass、DatabaseActivity.this);
}捕获(数字格式){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
Log.d(标签“放置额外的”+id);
i_login.putExtra(“key”,id);
i_login.putExtra(“bkey”,Ubal);
startActivity(i_登录);
完成();
}
}
打破
案例R.id.buttonNewUser:
Intent i=newintent(DatabaseActivity.this、NewUserActivity.class);
星触觉(i);
完成();
打破
案例R.id.buttonShowAll:
Intent i_admin=newintent(DatabaseActivity.this,AdminPage.class);
startActivity(i_admin);
完成();
打破
}
}
公共布尔validateLogin(字符串取消、字符串传递、上下文)
抛出异常{
myDb=新的DbHelper(上下文);
SQLiteDatabase=myDb.getReadableDatabase();
//挑选
字符串[]列={u id};
//WHERE子句
字符串选择=“用户名=?和密码=?”;
//WHERE子句参数
字符串[]selectionArgs={uname,pass};
游标=空;
试一试{
//从username=uname和password=pass的登录名中选择_id
cursor=db.query(DbHelper.SUBH_TABLE_名称、列、选择、,
selectionArgs,null,null,null);
开始管理游标(游标);
}捕获(例外e){
e、 printStackTrace();
}
int numberOfRows=cursor.getCount();

如果(numberOfRows)发布stacktrace和相关的codeSqlite是本地存储系统,因此不需要特定的“服务器”要安装。正如@raghunandan所说,没有代码或logat log,我们无法说明您的问题。请注意,模拟器上有一个客户端二进制sqlite3,eng不在生产版本中构建它,因此如果您使用它而不是java LIB,您将有一个问题。因此,如果它在我的模拟器上工作正常,那么它必须工作在我的移动设备上没有任何安装?