# Number Format Exception



## Panda9296 (14. Jul 2020)

Hi Leute, es geht um meine App und zwar möchte ich einen Spinner einbauen und verstehe nicht warum ich eine Exception bekomme, da das Objekt eigentlich da sein müsste. Das komische an der Geschichte ist auch, dass ein Freund das auch getestet hat, es das erste Mal passiert ist, er den Spinner ein klein wenig abgeändert hat, indem er einen selectlistener hinzugefügt hat. Ich habe es geändert und bekomme die Fehlermeldung trotzdem noch. Jetzt aber mal von vorne: 

Ich habe eine Klasse User wie folgt aufgebaut:


```
package de.miguel.frozzenlist.frozzenbetaa;

import android.content.Intent;

import java.io.Serializable;
import java.lang.reflect.Array;
import java.util.ArrayList;

/**
   =============================================================================================
   @author ########, project FrozzenList
   @version 1.0Beta
   @param: conntent UserObject: Attributs:name,passwort,email:option to change Passwort
          in a other Activity, optional:link for email
   @link MainActivity,UserManager,Registry
   =============================================================================================
 */

public class User implements Serializable {


    private String userName;
    private String passwort;
    private String email;
    ArrayList<Freezer>freezers;

    //Instance
    public User( String userName, String passwort, String email) {

        this.userName = userName;
        this.passwort= passwort;
        this.email= email;
        if(freezers==null){
            freezers=new ArrayList<>();
        }


    }
    public User(String passwort,String email){
        this.passwort=passwort;
        this.email=email;
        freezers=new ArrayList<>();

        //for login

    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPasswort() {
        return passwort;
    }
    public void setPasswort(String passwort) {
        this.passwort=passwort;
    }
    public String getEmail(){
        return email;
    }
    public void setEmail(String inputEmail){
        this.email=inputEmail;
    }
    public void changePasswort(String input)
    {
        this.passwort= input;
    }
}
```

Dazu habe ich einen Manager entworfen der wie folgt aufgebaut ist:


```
package de.miguel.frozzenlist.frozzenbetaa;

   import android.content.Context;
   import android.os.Build;
   import android.util.ArrayMap;
   import android.view.View;

   import androidx.annotation.RequiresApi;

   import com.orhanobut.hawk.Hawk;

   import java.util.ArrayList;

    /**
    ==============================================================
     @author ######, project FrozzenList
     @version 1.0Beta
     @param: save Userunit: Hawk to saveList,loadList and addUser
     @Link userManager
    ==============================================================
    */

   @RequiresApi(api = Build.VERSION_CODES.KITKAT)
   public class UserManager {

    public ArrayList<User> userList;

    //Instance
    public UserManager(Context context){
        Hawk.init(context).build();
        loadList();
    }

    public void saveList(){
         Hawk.put("userList",userList);
    }
    public void loadList(){

        userList= Hawk.get("userList",new ArrayList<>());

    }
    public void addUser(User user){
        userList.add(user);
        saveList();
    }
    public void removeUser(int position){
        userList.remove(position);
        saveList();
    }
}
```
Der User wird regristriet(die klasse ist nicht so wichtig deswegen gibt es hier einen Link:https://hastebin.com/uvayugijib.java) und man kann sich selbstverständlich auch schon anmelden 

```
package de.miguel.frozzenlist.frozzenbetaa;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.EditText;

import java.io.Serializable;
import java.util.ArrayList;

   /**
   =============================================================================================
   @author Miguel Gutierrez, project FrozzenList
   @version 1.0Beta
   @param: set Loginscreen to insert frezzermanagment activity: Button for sign in and register.
   @Link to FreezerManager, Register
   =============================================================================================
    */

import static android.app.PendingIntent.getActivity;

public class MainActivity extends Activity{

    Button btnRegister;
    Button btnSignIn;
    EditText inputEmail;
    EditText inputPasswort;

    ArrayList<Serializable> userArrayList= new ArrayList<java.io.Serializable>();



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

        btnRegister= (Button)findViewById(R.id.bntRegister);
        btnRegister.setOnClickListener(view -> registerClick());

        btnSignIn= (Button)findViewById(R.id.bntSignIn);
        inputEmail= (EditText)findViewById(R.id.bntViewEmail);
        inputPasswort= (EditText)findViewById(R.id.btnViewPasswort);

        // sign in condition
        btnSignIn.setOnClickListener(view-> signInClick());
    }
    void signInClick(){
        Log.d("MainActivity","test");
        String userEmail = inputEmail.getText().toString();
        String passwort = inputPasswort.getText().toString();
        if(userEmail.isEmpty()) {
            inputEmail.setError("Bitte Email eingeben");
            inputEmail.requestFocus();
        }
        else if(passwort.isEmpty()){
            inputPasswort.setError("Bitte Passwort eingeben");
            inputPasswort.requestFocus();
        }
        if(!userEmail.isEmpty()&&!passwort.isEmpty()) {

            UserManager userManager= new UserManager(this);
            User user= new User(passwort,userEmail);
            for(int i=0;i<userManager.userList.size();i++){

                User compareUser= userManager.userList.get(i);
                Log.d("MainActivity", compareUser.getUserName());
                if(compareUser.getEmail().equals(user.getEmail())&&compareUser.getPasswort().equals(user.getPasswort())){

                    Intent intent= new Intent(MainActivity.this, FreezerManager.class);
                    intent.putExtra("position", i);
                    startActivity(intent);
                }
            }
        }
    }
     //register button
        void registerClick(){
        Intent intent = new Intent(MainActivity.this,Register.class);
        startActivity(intent);

    }
}
```

Jetzt sind aber Probleme hinzugekommen die ich nicht ganz nachvollziehen kann:

Das Ziel des Anmeldebuttons ist ein manager:

```
package de.miguel.frozzenlist.frozzenbetaa;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
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.TextView;

import com.orhanobut.hawk.Hawk;

import java.util.ArrayList;
import java.util.HashMap;

/**
    ========================================================================
    @author #######, project FrozzenList
    @version 1.0Beta
    @param : freezer: addFreezer(), removeFreezer(), getFrezzer()
           To add Freezer we need to have number of Trays and a frezzer name
           We need to set a error information in editText field for Exceptions
           (parsing)we include to join a frezzermember on the same Activity
     @link Hawk freezerList to save freezer for Account
    ========================================================================

 */

public class FreezerManager extends AppCompatActivity {

    EditText inputName;
    EditText inputNumberTrays;
    Button addFreezer;
    Spinner freezerList;
    User user;

    public FreezerManager() {


    }



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_freezer_manager);
        user = new UserManager(this).userList.get(getIntent().getIntExtra("position",0));
        inputName = (EditText) findViewById(R.id.editTextName);
        inputNumberTrays = (EditText) findViewById(R.id.editTextNumberTray);
        addFreezer = (Button) findViewById(R.id.btnAdd);
        //freezerList=(Spinner)findViewById(R.id.spinner);

        addFreezer.setOnClickListener(view->onButtonClick());
        ArrayAdapter<Freezer>adapter=new ArrayAdapter<>(this,android.R.layout.simple_spinner_dropdown_item,user.freezers);
        freezerList.setAdapter(adapter);
        freezerList.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

                int spinnerposition= freezerList.getSelectedItemPosition();


            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });


    }

    private void onButtonClick() {
        String name= inputName.getText().toString();
        try{
            int traySize= Integer.parseInt(inputNumberTrays.getText().toString());
            Freezer freezer = new Freezer(name,traySize);
            user.freezers.add(freezer);
        }catch (NumberFormatException exception){
            inputNumberTrays.setError("Du darfst nur eine ganze Zahl für die" +
                    " Anzahl der Fächer verwenden");
        }


    }


}
```
(https://hastebin.com/emisajirix.java)

Das Problem ist das er eine NullPointer Exception wirft und ich glaube er findet die ArrayList nicht.... Ich weiß nicht warum... Das Ziel des Spinners ist, alle Freezer anzuzeigen die für den Nutzer angelegt wurden ... Muss ich das jetzt extra speichern, weil die Liste nicht ankommt? Oder ist was in Java falsch geschrieben^^?. Wäre nett wenn, ihr die Zeit habt das genauer zu erklären .


----------



## VfL_Freak (15. Jul 2020)

Moin,

habe jetzt den Code gar nicht erst angeschaut!

Im Titel steht was von "number format exception", jetzt am Ende plötzlich "Null Pointer Exception " ....
Könntest Du mal für eins entscheiden ??  😜 

Zudem fehlt der konkrete Stacktrace sowie im Code eine deutliche Angabe, an welcher Stelle dies passiert!
VG Klaus


----------



## kneitzel (15. Jul 2020)

Evtl. ist es eine NPE bei `freezerList.setAdapter(adapter);` - denn die Variable freezerList wird nie gesetzt, da es auskommentiert wurde:
`//freezerList=(Spinner)findViewById(R.id.spinner);`

Aber ohne Details ist das ein Ratespiel... Wer weiss, ob er überhaupt bis zu dem Punkt kommt oder nicht ...


----------

