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:
Dazu habe ich einen Manager entworfen der wie folgt aufgebaut ist:
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
Jetzt sind aber Probleme hinzugekommen die ich nicht ganz nachvollziehen kann:
Das Ziel des Anmeldebuttons ist ein manager:
(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
.
Ich habe eine Klasse User wie folgt aufgebaut:
Code:
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:
Code:
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();
}
}
Code:
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:
Code:
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");
}
}
}
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