java - android app crahses and data still gets entered into the databases -
this question has answer here:
- what nullpointerexception, , how fix it? 12 answers
i in process of developing registration app using android studios, once users try register application says error in registration , logcat not give error, when debugging app, still no errors.
please can , tell me going wrong code correct working couple of months ago, since have returned holiday says "error occurred in registration".
user data gets entered database not allow user move onto next activity says "error occurred in registration". please can or advise?
logcat
01-07 15:14:42.933 2161-4203/com.oakland e/json parser: error parsing data org.json.jsonexception: value 2016-01-07 of type java.lang.string cannot converted jsonobject 01-07 15:14:42.938 2161-2161/com.oakland e/androidruntime: fatal exception: main process: com.oakland, pid: 2161 java.lang.nullpointerexception: attempt invoke virtual method 'java.lang.string org.json.jsonobject.getstring(java.lang.string)' on null object reference @ com.oakland.register$processregister.onpostexecute(register.java:211) @ com.oakland.register$processregister.onpostexecute(register.java:171)
line 211- if (json.getstring(key_success) != null) {
register.java
public class register extends activity { /** * json response node names. **/ private static string key_success = "success"; private static string key_uid = "uid"; private static string key_firstname = "fname"; private static string key_lastname = "lname"; private static string key_username = "uname"; private static string key_email = "email"; private static string key_created_at = "created_at"; private static string key_error = "error"; /** * defining layout items. **/ edittext inputfirstname; edittext inputlastname; edittext inputusername; edittext inputemail; edittext inputpassword; imagebutton btnregister; textview registererrormsg; /** * called when activity first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.register); /** * defining layout items **/ inputfirstname = (edittext) findviewbyid(r.id.fname); inputlastname = (edittext) findviewbyid(r.id.lname); inputusername = (edittext) findviewbyid(r.id.uname); inputemail = (edittext) findviewbyid(r.id.email); inputpassword = (edittext) findviewbyid(r.id.pword); btnregister = (imagebutton) findviewbyid(r.id.registerbtn); registererrormsg = (textview) findviewbyid(r.id.register_error); /** * register button click event. * toast set alert when fields empty. * toast set alert username must 5 characters. **/ btnregister.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { if ( ( !inputusername.gettext().tostring().equals("")) && ( !inputpassword.gettext().tostring().equals("")) && ( !inputfirstname.gettext().tostring().equals("")) && ( !inputlastname.gettext().tostring().equals("")) && ( !inputemail.gettext().tostring().equals("")) ) { if ( inputusername.gettext().tostring().length() > 4 ){ netasync(view); } else { toast.maketext(getapplicationcontext(), "username should minimum 5 characters", toast.length_short).show(); } } else { toast.maketext(getapplicationcontext(), "one or more fields empty", toast.length_short).show(); } } }); } /** * async task check whether internet connection working **/ private class netcheck extends asynctask<string,string,boolean> { private progressdialog ndialog; @override protected void onpreexecute(){ super.onpreexecute(); ndialog = new progressdialog(register.this); ndialog.setmessage("loading.."); ndialog.settitle("checking network"); ndialog.setindeterminate(false); ndialog.setcancelable(true); ndialog.show(); } @override protected boolean doinbackground(string... args){ /** * gets current device state , checks working internet connection trying google. **/ connectivitymanager cm = (connectivitymanager) getsystemservice(context.connectivity_service); networkinfo netinfo = cm.getactivenetworkinfo(); if (netinfo != null && netinfo.isconnected()) { try { url url = new url("http://www.google.com"); httpurlconnection urlc = (httpurlconnection) url.openconnection(); urlc.setconnecttimeout(3000); urlc.connect(); if (urlc.getresponsecode() == 200) { return true; } } catch (malformedurlexception e1) { // todo auto-generated catch block e1.printstacktrace(); } catch (ioexception e) { // todo auto-generated catch block e.printstacktrace(); } } return false; } @override protected void onpostexecute(boolean th){ if(th == true){ ndialog.dismiss(); new processregister().execute(); } else{ ndialog.dismiss(); registererrormsg.settext("error in network connection"); } } } private class processregister extends asynctask<string, string, jsonobject> { /** * defining process dialog **/ private progressdialog pdialog; string email,password,fname,lname,uname; @override protected void onpreexecute() { super.onpreexecute(); inputusername = (edittext) findviewbyid(r.id.uname); inputpassword = (edittext) findviewbyid(r.id.pword); fname = inputfirstname.gettext().tostring(); lname = inputlastname.gettext().tostring(); email = inputemail.gettext().tostring(); uname= inputusername.gettext().tostring(); password = inputpassword.gettext().tostring(); pdialog = new progressdialog(register.this); pdialog.settitle("contacting servers"); pdialog.setmessage("registering ..."); pdialog.setindeterminate(false); pdialog.setcancelable(true); pdialog.show(); } @override protected jsonobject doinbackground(string... args) { userfunctions userfunction = new userfunctions(); jsonobject json = userfunction.registeruser(fname, lname, email, uname, password); return json; } @override protected void onpostexecute(jsonobject json) { try { if (json.getstring(key_success) != null) { registererrormsg.settext(""); string res = json.getstring(key_success); string red = json.getstring(key_error); if(integer.parseint(res) == 1){ pdialog.settitle("getting data"); pdialog.setmessage("loading info"); registererrormsg.settext("successfully registered"); databasehandler db = new databasehandler(getapplicationcontext()); jsonobject json_user = json.getjsonobject("user"); /** * removes previous data in sqlite database **/ userfunctions logout = new userfunctions(); logout.logoutuser(getapplicationcontext()); db.adduser(json_user.getstring(key_firstname),json_user.getstring(key_lastname),json_user.getstring(key_email),json_user.getstring(key_username),json_user.getstring(key_uid),json_user.getstring(key_created_at)); /** * stores registered data in sqlite database * launch registered screen **/ intent registered = new intent(getapplicationcontext(), registered.class); /** * close views before launching registered screen **/ registered.addflags(intent.flag_activity_clear_top); pdialog.dismiss(); startactivity(registered); finish(); } else if (integer.parseint(red) ==2){ pdialog.dismiss(); registererrormsg.settext("user exists"); } else if (integer.parseint(red) ==3){ pdialog.dismiss(); registererrormsg.settext("invalid email id"); } } else{ pdialog.dismiss(); registererrormsg.settext("error occurred in registration"); } } catch (jsonexception e) { e.printstacktrace(); } }} public void netasync(view view){ new netcheck().execute(); }}
userfunction.java
//url of php api private static string registerurl = "http://10.0.2.2/register_api/"; private static string register_tag = "register"; /** * function register **/ public jsonobject registeruser(string fname, string lname, string email, string uname, string password){ // building parameters list params = new arraylist(); params.add(new basicnamevaluepair("tag", register_tag)); params.add(new basicnamevaluepair("fname", fname)); params.add(new basicnamevaluepair("lname", lname)); params.add(new basicnamevaluepair("email", email)); params.add(new basicnamevaluepair("uname", uname)); params.add(new basicnamevaluepair("password", password)); jsonobject json = jsonparser.getjsonfromurl(registerurl,params); return json; }
jsonpasar.java
public class jsonparser { static inputstream = null; static jsonobject jobj = null; static string json = ""; // constructor public jsonparser() { } public jsonobject getjsonfromurl(string url, list<namevaluepair> params) { // making http request try { // defaulthttpclient defaulthttpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(url); httppost.setentity(new urlencodedformentity(params)); httpresponse httpresponse = httpclient.execute(httppost); httpentity httpentity = httpresponse.getentity(); = httpentity.getcontent(); } catch (unsupportedencodingexception e) { e.printstacktrace(); } catch (clientprotocolexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } try { bufferedreader reader = new bufferedreader(new inputstreamreader( is, "iso-8859-1"), 8); stringbuilder sb = new stringbuilder(); string line = null; while ((line = reader.readline()) != null) { sb.append(line + "\n"); } is.close(); json = sb.tostring(); log.e("json", json); } catch (exception e) { log.e("buffer error", "error converting result " + e.tostring()); } // try parse string json object try { jobj = new jsonobject(json); } catch (jsonexception e) { log.e("json parser", "error parsing data " + e.tostring()); } // return json string return jobj; } }
databasehandler.java
public class databasehandler extends sqliteopenhelper { // static variables // database version private static final int database_version = 1; // database name private static final string database_name = "cloud_contacts"; // login table name private static final string table_login = "login"; // login table columns names private static final string key_id = "id"; private static final string key_firstname = "fname"; private static final string key_lastname = "lname"; private static final string key_email = "email"; private static final string key_username = "uname"; private static final string key_uid = "uid"; private static final string key_created_at = "created_at"; public databasehandler(context context) { super(context, database_name, null, database_version); } // creating tables @override public void oncreate(sqlitedatabase db) { string create_login_table = "create table " + table_login + "(" + key_id + " integer primary key," + key_firstname + " text," + key_lastname + " text," + key_email + " text unique," + key_username + " text," + 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 fname, string lname, string email, string uname, string uid, string created_at) { sqlitedatabase db = this.getwritabledatabase(); contentvalues values = new contentvalues(); values.put(key_firstname, fname); // firstname values.put(key_lastname, lname); // lastname values.put(key_email, email); // email values.put(key_username, uname); // username values.put(key_uid, uid); // email values.put(key_created_at, created_at); // created @ // inserting row db.insert(table_login, null, values); db.close(); // 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; sqlitedatabase db = this.getreadabledatabase(); cursor cursor = db.rawquery(selectquery, null); // move first row cursor.movetofirst(); if(cursor.getcount() > 0){ user.put("fname", cursor.getstring(1)); user.put("lname", cursor.getstring(2)); user.put("email", cursor.getstring(3)); user.put("uname", cursor.getstring(4)); user.put("uid", cursor.getstring(5)); user.put("created_at", cursor.getstring(6)); } cursor.close(); db.close(); // return user return user; } /** * getting user login status * return true if rows there in table * */ public int getrowcount() { string countquery = "select * " + table_login; sqlitedatabase db = this.getreadabledatabase(); cursor cursor = db.rawquery(countquery, null); int rowcount = cursor.getcount(); db.close(); cursor.close(); // return row count return rowcount; } /** * re crate database * delete tables , create them again * */ public void resettables(){ sqlitedatabase db = this.getwritabledatabase(); // delete rows db.delete(table_login, null, null); db.close(); }
you should edit log statement or add log statement show string you're trying convert json object contains. think appropriate instantiate jsonobject on spot rather having static variable.
log.e("buffer error", "error converting result " + json); jsonobject jobj = new jsonobject(json);
to prevent null pointer should change if statement to:
if(json != null && json.getstring(key_success) != null)
what's happening there problem jsonobject creation , it's trying call getstring on resultantly null jsonobject.
Comments
Post a Comment