0

My app keeps crashing since I started using a TextWatcher... As you can see below i made a TextWatcher to 3 EditText fields... And i made a button which listens to the 3 EditText.. If they are empty the button become disabled. When the fields are filled the button should become enabled..

 package com.example.magazijnapp;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.MenuPopupWindow;

import android.content.DialogInterface;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import org.w3c.dom.Text;

import java.sql.Array;

public class MainActivity extends AppCompatActivity {

    Spinner spinnermagazijn;
    Button knop;
    private EditText EditTextregisternummerbalk;
    private EditText EditTextticketnummerbalk;
    private EditText EditTextartikelnummerbalk;
    private Button knopconfirm;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditTextregisternummerbalk = findViewById(R.id.registernummerbalk);
        EditTextticketnummerbalk = findViewById(R.id.ticketnummerbalk);
        EditTextartikelnummerbalk = findViewById(R.id.artikelnummerbalk);
        knopconfirm = findViewById(R.id.knop);

        EditTextregisternummerbalk.addTextChangedListener(invulTextWatcher);
        EditTextticketnummerbalk.addTextChangedListener(invulTextWatcher);
        EditTextartikelnummerbalk.addTextChangedListener(invulTextWatcher);
    }
        private TextWatcher invulTextWatcher = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String registernummerinput = EditTextregisternummerbalk.getText().toString().trim();
                String ticketnummerinput = EditTextticketnummerbalk.getText().toString().trim();
                String artikelnummerinput = EditTextartikelnummerbalk.getText().toString().trim();

                knopconfirm.setEnabled(!registernummerinput.isEmpty() && !ticketnummerinput.isEmpty() &&! artikelnummerinput.isEmpty());
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        };
    {

        spinnermagazijn = findViewById(R.id.spinnermagazijn);

        knop = findViewById(R.id.knop);
        populatespinnermagazijn();


        // Dit is het stukje voor de Knop afboeken waarmee je een melding genereerd,  String aanpassen voor ander resultaat.
        knop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            Toast.makeText(MainActivity.this, (R.string.succes), Toast.LENGTH_SHORT) .show();
            }

        });


    }
        // Dit gedeelte is voor de spinner.
    private void populatespinnermagazijn() {
        ArrayAdapter<String> magazijnenAdapter  = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.steunpunten));
        magazijnenAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnermagazijn.setAdapter(magazijnenAdapter);
    }
}

And this is my logcat...

03-19 21:04:06.293 21151-21151/? E/libprocessgroup: failed to make and chown /acct/uid_10060: Read-only file system
03-19 21:04:06.293 21151-21151/? W/Zygote: createProcessGroup failed, kernel missing CONFIG_CGROUP_CPUACCT?
03-19 21:04:06.293 21151-21151/? I/art: Not late-enabling -Xcheck:jni (already on)
03-19 21:04:06.313 21151-21161/? I/art: Debugger is no longer active
03-19 21:04:06.351 21151-21151/? D/AndroidRuntime: Shutting down VM
03-19 21:04:06.354 21151-21151/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.magazijnapp, PID: 21151
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.magazijnapp/com.example.magazijnapp.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
        at android.app.ActivityThread.access$800(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
        at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:149)
        at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:99)
        at android.content.Context.obtainStyledAttributes(Context.java:437)
        at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:692)
        at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:659)
        at androidx.appcompat.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:479)
        at androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:214)
        at com.example.magazijnapp.MainActivity.<init>(MainActivity.java:73)
        at java.lang.reflect.Constructor.newInstance(Native Method)
        at java.lang.Class.newInstance(Class.java:1606)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
        at android.app.ActivityThread.access$800(ActivityThread.java:151) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5254) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
03-19 21:04:07.996 21151-21151/? I/Process: Sending signal. PID: 21151 SIG: 9
Ebekoy
  • 5
  • 3

2 Answers2

0

There are two findViewById(R.id.knop);

remove this line:

knop = findViewById(R.id.knop);

and change :

knopconfirm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        Toast.makeText(MainActivity.this, (R.string.succes), Toast.LENGTH_SHORT) .show();
        }

    });
Kasım Özdemir
  • 5,414
  • 3
  • 18
  • 35
0

You are saying your app is crashing since you started using TextWatcher. So why don't you stop using it? you can achieve the same thing without using TextWatcher by doing this.

  knop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
         String registernummerinput = EditTextregisternummerbalk.getText().toString().trim();
            String ticketnummerinput = EditTextticketnummerbalk.getText().toString().trim();
            String artikelnummerinput = EditTextartikelnummerbalk.getText().toString().trim();

        if((!registernummerinput.isEmpty() && !ticketnummerinput.isEmpty() &&! artikelnummerinput.isEmpty())) {
                 Toast.makeText(MainActivity.this, (R.string.succes), Toast.LENGTH_SHORT) .show();
             }
        }

    });

you will not need any TextWathcer just modify the listner

aliraza12636
  • 395
  • 3
  • 16