java - android app crahses and data still gets entered into the databases -


this question has answer here:

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

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -