-1

I am getting this error on my main activity screen when I start this activity it crashes my app.

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.noidea, PID: 24739 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.noidea/com.noidea.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3760) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3939) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2373) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:213) at android.app.ActivityThread.main(ActivityThread.java:8147) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at com.noidea.MainActivity.onCreate(MainActivity.java:52) at android.app.Activity.performCreate(Activity.java:8066) at android.app.Activity.performCreate(Activity.java:8054) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1313) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3733) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3939)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2373)  at android.os.Handler.dispatchMessage(Handler.java:107)  at android.os.Looper.loop(Looper.java:213)  at android.app.ActivityThread.main(ActivityThread.java:8147)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)

THIS IS MY MAINACTIVITY CODE. If anyone can find the cause of error, a reply to it will be really appreciated



com.noidea;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
        //fetching ids
        EditText Fullname_reg = findViewById(R.id.Firstnameid);
        EditText Username_reg = findViewById(R.id.Usernameid);
        EditText Email_reg = findViewById(R.id.Emailid);
        EditText Password_reg = findViewById(R.id.Passwordid);
        EditText RePass_reg = findViewById(R.id.repasswordid);
        Spinner Month_reg = findViewById(R.id.monthid);
        Spinner Date_reg = findViewById(R.id.dayid);
        Spinner Year_reg = findViewById(R.id.yearid);
        RadioGroup Gender_reg = findViewById(R.id.genderid);
        CheckBox Terms_reg = findViewById(R.id.agreementid);
        Button Register_reg = findViewById(R.id.reg_butid);


        //making String objects for entered data
        final String Fullname , Username, Email ,Password, Repassword, Month, Date, Year, Gender;


        //fetching entered data
        Fullname = Fullname_reg.getText().toString();
        Username = Username_reg.getText().toString();
        Email= Email_reg.getText().toString();
        Password = Password_reg.getText().toString();
        Repassword = RePass_reg.getText().toString();
        Month = Month_reg.getSelectedItem().toString();
        Date = Date_reg.getSelectedItem().toString();
        Year = Year_reg.getSelectedItem().toString();

        //calling the spinner method
            spinner_med();


            //fetching ids from the fetch method
            //String[] Credentials = fetch();
            //Fullname = Credentials[0];
            //Username = Credentials[1];
            //Email = Credentials[2];
            //Password = Credentials[3];
            //Repassword = Credentials[4];
            //Month = Credentials[5];
            //Date = Credentials[6];
            //Year = Credentials[7];
            //Gender = Credentials[8];

        Register_reg.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean full_name = Fullname_check(Fullname);
                    //proceeds to next check if fullname is valid
                    if (full_name){
                        boolean username = Username_check(Username);

                        //proceeds to next check if username is valid
                        if (username){
                            boolean email = Email_check(Email);

                            //proceeds to next check if email is valid
                            if (email){
                                boolean password = Password_check(Password);

                                //proceed to next check if password is valid
                                if (password){
                                    boolean repassword = Repassword_check(Repassword, Password);

                                    //proceed to next check if repassword is valid
                                    if (repassword) {
                                        Toast Registered = Toast.makeText(MainActivity.this, "Validity check pass", Toast.LENGTH_LONG);
                                        Registered.show();
                                    }
                                }
                            }
                        }
                    }
                }
            });



    }

    public void spinner_med(){
        //declaring spinners and array adapters
        Spinner spinner_days, spinner_month, spinner_years, spinner_genders;
        ArrayAdapter<String> adapter_day, adapter_month, adapter_year, adapter_gender;

        //month spinner
        spinner_month = findViewById(R.id.monthid);
        adapter_month = new ArrayAdapter<>(
                this,
                R.layout.custom_spinner,
                getResources().getStringArray(R.array.Months)
        );
        adapter_month.setDropDownViewResource(R.layout.custom_spinner_dropdown);
        spinner_month.setAdapter(adapter_month);

        //days spinner
        ArrayList<String> days = new ArrayList<>();
        days.add("Day");
        for (int d = 1; d <= 31; d++){
            String day = String.valueOf(d);
            days.add(day);
        }
        spinner_days = findViewById(R.id.dayid);
        adapter_day = new ArrayAdapter<String>(
                this,
                R.layout.custom_spinner,
                days
                );
        adapter_day.setDropDownViewResource(R.layout.custom_spinner_dropdown);
        spinner_days.setAdapter(adapter_day);

        //years spinner
       ArrayList<String> years = new ArrayList<>();
       years.add("Year");
       for (int y = 1980; y<=2020; y++){
           String year = String.valueOf(y);
           years.add(year);
       }
        spinner_years = findViewById(R.id.yearid);
        adapter_year = new ArrayAdapter<String>(
                this,
                R.layout.custom_spinner,
                years
        );
        adapter_year.setDropDownViewResource(R.layout.custom_spinner_dropdown);
        spinner_years.setAdapter(adapter_year);

    }

    public void back(View v){

        Intent back = new Intent(this, lginscreen.class);
        startActivity(back);
    }

    //public String[] fetch(){
        //making String objects for entered data
      //String Fullname;
        //String Username;
        //String Email;
        //String Password;
        //String Repassword;
        //String Month;
        //String Date;
        //String Year;
        //RadioButton Gen;



        //fetching radio Button data
        //int selectedgen = Gender_reg.getCheckedRadioButtonId();
        //Gen = (RadioButton) findViewById(selectedgen);
        //String Gender = Gen.getText().toString();

        //String[] Cred = {Fullname, Username, Email ,Password, Repassword, Month, Date, Year, Gender};
        //return Cred;
    //}

    //fullname check
    public boolean Fullname_check(String Fullname){
        int verification;
        Pattern Fullname_pattern = Pattern.compile("[^a-z] ", Pattern.CASE_INSENSITIVE);
        Matcher Fullname_matcher = Fullname_pattern.matcher(Fullname);
        boolean checked_fullname = Fullname_matcher.matches();
        if (checked_fullname)
            return true;
        else
            return false;
    }

    //username check
    public boolean Username_check(String Username){
        Pattern Username_pattern = Pattern.compile("[^a-z0-9_#.-]", Pattern.CASE_INSENSITIVE);
        Matcher Username_matcher = Username_pattern.matcher(Username);
        boolean checked_username = Username_matcher.matches();
        if (checked_username)
            return true;
        else
            return false;
    }

    //email check
    public boolean Email_check(String Email){
        String email_regex = "[a-zA-Z0-9._-]+@[a-z]+\\.[a-z]+";
        Pattern email_pattern = Pattern.compile(email_regex);
        Matcher email_matcher = email_pattern.matcher(Email);
        boolean checked_email = email_matcher.matches();
        if (checked_email)
            return true;
        else
            return false;
    }

    //password check
    public  boolean Password_check(String Password){
        Pattern password_pattern = Pattern.compile("[a-zA-Z0-9_.!#-]+"), num_pattern = Pattern.compile("[0-9]");
        Matcher password_match = password_pattern.matcher(Password);
        boolean checked_password = password_match.matches();
        if (checked_password)
            return true;
        else
            return false;
    }

    //repassword check
    public boolean Repassword_check(String Repassword, String Password){
        if (Repassword.equals(Password))
            return true;
        else
            return false;
    }



}
  • Just look at the line which is crashing. Unwind the code so you do not chain method calls in order to know which object is actually `null` – Michael P Apr 21 '20 at 14:09

1 Answers1

0

your crash is because of NullPointerException at line 52 inside OnCreate method: (Probably one of these)

Fullname = Fullname_reg.getText().toString();
Username = Username_reg.getText().toString();
Email= Email_reg.getText().toString();
Password = Password_reg.getText().toString();
Repassword = RePass_reg.getText().toString();
Month = Month_reg.getSelectedItem().toString();
Date = Date_reg.getSelectedItem().toString();
Year = Year_reg.getSelectedItem().toString();

SOLUTION

wrap your error prone code inside a Try/Catch block that can handle multiple exceptions:

try{
  Fullname = Fullname_reg.getText().toString();
  Username = Username_reg.getText().toString();
  Email= Email_reg.getText().toString();
  Password = Password_reg.getText().toString();
  Repassword = RePass_reg.getText().toString();
  Month = Month_reg.getSelectedItem().toString();
  Date = Date_reg.getSelectedItem().toString();
  Year = Year_reg.getSelectedItem().toString();
}
catch (NullPointerException e) {
  Log.e("Class name goes here", "NPE occured at " + e);
}
catch (Exception e) {
  Log.e("Class name goes here", "Exception occured at " + e);
}
Karan Dhillon
  • 1,186
  • 1
  • 6
  • 14
  • I am also getting this error whenever i try to enter anything into the EDITTEXT box on my phone. E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length – Just Moeed Apr 21 '20 at 16:18
  • This looks like a keyboard issue rather than an edittext issue. Refer to this to understand it better https://stackoverflow.com/questions/13670374/android-span-exclusive-exclusive-spans-cannot-have-a-zero-length – Karan Dhillon Apr 21 '20 at 16:24
  • Changing the keyboard from swift to Gboard worked. Thanks alot :) – Just Moeed Apr 21 '20 at 16:40
  • No worries. Don't forget to upvote the answers that work. – Karan Dhillon Apr 21 '20 at 16:55