NullPointerException on Json.getString() - Android app crashes

+1 John Owens · December 19, 2015
I am trying to make a Register system for android. It registers users into the database and they receive an email confirmation, however the application crashes and closes.
I have checked the forum of how to correct NullPointer errors, however I am struggling, therefore could someone please offer me a helping hand. I have checked the post .What is a Null Pointer Exception, and how do I fix it?. Still cannot find my solution please advise and help.

CatLog - Error Messages

E/JSON Parser? Error parsing data org.json.JSONException: Value 2015-12-09 of type java.lang.String cannot be converted to JSONObject
E/AndroidRuntime? FATAL EXCEPTION: mainPID: 2386 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.getString(java.lang.String)' on a null object reference
at com.app.tourist.Register$ProcessRegister.onPostExecute(Register.java:214
at com.app.tourist.Register$ProcessRegister.onPostExecute(Register.java:171)

private class ProcessRegister extends AsyncTask<String, String, JSONObject> { - Line 171: Gving Error Here.

  if (json.getString(KEY_SUCCESS) != null) { - Line 214: Giving Error.


Register.Java File


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 the activity is first created.
    */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.register);

       /**
        * Defining all 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.
        * A Toast is set to alert when the fields are empty.
        * Another toast is set to alert Username must be 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 be minimum 5 characters", Toast.LENGTH_SHORT).show();
                   }
               }
               else
               {
                   Toast.makeText(getApplicationContext(),
                           "One or more fields are empty", Toast.LENGTH_SHORT).show();
               }
           }
       });
   }
   /**
    * Async Task to check whether internet connection is 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 and checks for working internet connection by 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) {
           /**
            * Checks for success message.
            **/
           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 all the previous data in the 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 all 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 already exists");
                   }
                   else if (Integer.parseInt(red) ==3){
                       pDialog.dismiss();
                       registerErrorMsg.setText("Invalid Email id");
                   }

               }


               else{
                   pDialog.dismiss();

                   registerErrorMsg.setText("Error occured in registration");
               }

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


           }
       }}
   public void NetAsync(View view){
       new NetCheck().execute();
   }}



I know that it return null, but ccould you please help why does it return null.


Post a Reply

Replies

Oldest  Newest  Rating
0 Gary Whitney · December 20, 2015
The key to this would be to debug your UserFunctions.registerUser and see what  (or if) it is assigning to KEY_SUCCESS.
  • 1

Java / Android Development

107,252 followers
About

Very popular language used to create desktop applications, website applets, and Android apps.

Links
Moderators
Bucky Roberts Administrator