0

I have this piece of code. When I launch debug I receive the error

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{nicola.pokerstarsleaguecalculator/nicola.pokerstarsleaguecalculator.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference.

I suppose the error is here:

if (JTIscritti.getText().length()!=0)

How can i correct it? Thanks


public class MainActivity extends AppCompatActivity {
    public EditText JTIscritti = (EditText)findViewById(R.id.JTIscritti);
    public TextView JLPremiati = (TextView) findViewById(R.id.JLPremiati);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        JTIscritti.addTextChangedListener(new TextWatcher() {
        @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {
            premiati();
            }
            public void premiati() {
                if (JTIscritti.getText().length()!=0) {
                    PuntiLeague aPunti = new PuntiLeague();
                    String strIscritti = String.valueOf(JTIscritti.getText());
                    int iscritti = Integer.parseInt((strIscritti));
                    int premiati = aPunti.aPremio(iscritti);
                    String strPremiati = Integer.toString(premiati);
                    JLPremiati.setText(strPremiati);
                }
                else JLPremiati.setText("0");
            }
        });
    }
}

UPDATE: I solved thank to @ΦXocę 웃 Пepeúpa ツ and @VishnuSP moving some declarations+assignments

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final EditText JTIscritti = (EditText)findViewById(R.id.JTIscritti);
    final TextView JLPremiati = (TextView) findViewById(R.id.JLPremiati);
Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
Nicola M
  • 49
  • 6

2 Answers2

3

You have to do this initialization

public EditText JTIscritti = (EditText)findViewById(R.id.JTIscritti);
public TextView JLPremiati = (TextView) findViewById(R.id.JLPremiati);

in the onCreate method, remember that before that callback the layout is not inflated/initialized giving as consequence that JTIscritti and JLPremiati will get initialized to a null reference, so doing this JTIscritti.getText() on a null reference will throw a NPE!

ΦXocę 웃 Пepeúpa ツ
  • 47,427
  • 17
  • 69
  • 97
  • Thank you @ΦXocę 웃 Пepeúpa ツ . I flagged VishnuSP answer just because it was the first one. – Nicola M Jun 13 '17 at 12:14
3
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        JTIscritti = (EditText)findViewById(R.id.JTIscritti);
        JLPremiati = (TextView) findViewById(R.id.JLPremiati);

       //----your code/logic----
}

Views will be created only after

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

execution. Before that `findViewById' will return null.

VishnuSP
  • 599
  • 5
  • 16
  • Thank you @VishnuSP I moved Declaration and assignment after setContentView and declared them as final, and now It works – Nicola M Jun 13 '17 at 12:07