android - Reading from SQLite database causes stack overflow -


can't find problem why sqlite database cannot read, it's taken me long , still can't figure out why trying read giving me stack overflow, appreciate help, thank you.

public class databasehandler extends sqliteopenhelper {   private static context ctx;   // static variables // database version private static final int database_version = 1;  // database name private static final string database_name = "chirhogs_android_api";  // login table name private static final string table_login = "fusers";  // login table columns names private static final string key_id = "id"; public static final string key_name = "name"; public static final string key_email = "email"; private static final string key_uid = "uid"; private static final string key_created_at = "created_at";  public databasehandler(context ctx) {     super(ctx, database_name, null, database_version);     this.ctx = ctx;  }  databasehandler jhelper = new databasehandler(ctx.getapplicationcontext());  // creating tables @override public void oncreate(sqlitedatabase db) {     string create_login_table = "create table " + table_login + "("             + key_id + " integer primary key,"              + key_name + " text,"             + key_email + " text unique,"             + key_uid + " text,"             + key_created_at + " text " + ");";     db.execsql(create_login_table); }  // upgrading database @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) {     // drop older table if existed     db.execsql("drop table if exists " + table_login);      // create tables again     oncreate(db); }  /**  * storing user details in database  * */ public void adduser(string name, string email, string uid, string created_at) {     sqlitedatabase db = jhelper.getwritabledatabase();      contentvalues values = new contentvalues();     values.put(key_name, name); // name     values.put(key_email, email); // email     values.put(key_uid, uid); // email     values.put(key_created_at, created_at); // created @      // inserting row     db.insert(table_login, null, values);      // closing database connection }  /**  * getting user data database  * */ public hashmap<string, string> getuserdetails(){     hashmap<string,string> user = new hashmap<string,string>();     string selectquery = "select  * " + table_login + " order "+key_created_at+" desc limit 1";      sqlitedatabase db = jhelper.getreadabledatabase();      cursor cursor = db.rawquery(selectquery, null);     // move first row     cursor.movetofirst();     if(cursor.getcount() > 0){         user.put("name", cursor.getstring(1));         user.put("email", cursor.getstring(2));         user.put("uid", cursor.getstring(3));         user.put("created_at", cursor.getstring(4));     }     cursor.close();     db.close();     // return user     return user; }  /**  * getting user login.xml status  * return true if rows there in table  * */ public int getrowcount() {     string countquery = "select  * " + table_login;     sqlitedatabase db = jhelper.getreadabledatabase();     cursor cursor = db.rawquery(countquery, null);     int rowcount = cursor.getcount();      cursor.close();      // return row count     return rowcount; } 

when run gives me stack on flow , closes application, have checked sqlite database , data written correctly, it's reading issue.

here log:

05-29 15:15:59.827    3191-3191/? e/androidruntime﹕ fatal exception: main process: abelabs.dank, pid: 3191 java.lang.stackoverflowerror: stack size 8mb         @ android.database.sqlite.sqliteopenhelper.<init>(sqliteopenhelper.java:77)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:35)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs.dank.library.databasehandler.<init>(databasehandler.java:38)         @ abelabs. 

it's because of line:

databasehandler jhelper = new databasehandler(ctx.getapplicationcontext()); 

every time create new instance of databasehandler class, in turn creates new instance, creates new instance , on. rid of line , replace jhelper references this.

edit

generally, when use databasehelper, implement making databasehandler singleton.

private static databasehelper sdatabasehelperinstance = null;  public static databasehelper getinstance(context context) {     if (sdatabasehelperinstance == null)     {         sdatabasehelperinstance = new databasehelper(context);     }     return sdatabasehelperinstance; } 

and time need instance of sqlitedatabase, follows:

sqlitedatabase db = databasehelper.getinstance(some context object).getreadabledatabase(); 

and methods such getrowcount() , getuserdetails(), you'll have provide them context parameter.


Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -