Android Studio - App stürtzt ab

  • Antworten:7
  • Bentwortet
Popcorn2101
  • Forum-Beiträge: 5

24.06.2018, 20:53:03 via Website

Hey, ich hab ein Problem und zwar soll man bei der App Namen in einem EditText eingeben und die dann in einer neuen Activity in einer ListView ausgeben. Nur ist das Problem, dass die App wenn ich auf die neue Activity wechsele (vorher hatte das schon funtioniert) abstürtzt. Ich konnte es schon so weit eingrenzen, dass es irgendwas mit dem ArrayAdapter zutun haben muss, denn wenn ich den raus nehme funktiert es so weit.

Das ist die MainActivity Klasse:

public class MainActivity extends Activity implements View.OnClickListener {

Button sprache;
Button bestaetigen;
Button zuruecksetzen;
Button fertig;
EditText nachname;
int a;

static ArrayList<String> namensliste;


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


    sprache = (Button) findViewById(R.id.sprache);
    sprache.setOnClickListener(this);

    bestaetigen = (Button) findViewById(R.id.bestaetigen);
    bestaetigen.setOnClickListener(this);

    zuruecksetzen = (Button) findViewById(R.id.zuruecksetzen);
    zuruecksetzen.setOnClickListener(this);

    fertig = (Button) findViewById(R.id.fertig);
    fertig.setOnClickListener(this);

    nachname = (EditText) findViewById(R.id.nachname);

    namensliste = new ArrayList<>();

}

@Override
public void onClick(View v) {
    switch (v.getId()) {

        case R.id.fertig:

            Intent Intent1 = new Intent(this, Ausgabe.class);
            Intent1.putStringArrayListExtra("Namensliste",namensliste);


            Intent Intent = new Intent(this , Ausgabe.class);
            startActivity(Intent);
            this.finish();


            break;



        case R.id.sprache:
            break;
            //Aktionen Sprache Button

        case R.id.bestaetigen:
            String getInput = nachname.getText().toString();

            if(a >= 5){
                Toast.makeText(getBaseContext(), "Es wurden bereits 5 Namen eingegeben!",Toast.LENGTH_LONG).show();
            }

            else {

                if (getInput == null || getInput.trim().equals("")) {
                    Toast.makeText(getBaseContext(), "Eingabefeld darf nicht leer sein", Toast.LENGTH_LONG).show();
                } else {
                    namensliste.add(getInput);
                    Toast.makeText(getBaseContext(), "Name eingegeben", Toast.LENGTH_LONG).show();
                    a++;
                }
                break;
                //Aktionen Bestätigen Button
            }


        case R.id.zuruecksetzen:
            a = 0;
            break;
            //Aktionen Zurücksetzen Button
    }
}

}

und das die Klasse für die Ausgabe:

public class Ausgabe extends Activity implements View.OnClickListener {

Button zurueck;
ListView liste1;


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

    zurueck = (Button) findViewById(R.id.zuruek);
    zurueck.setOnClickListener((View.OnClickListener) this);

    liste1 = (ListView) findViewById(R.id.liste1);

    List<String> namensliste = new ArrayList<String>();
    namensliste = (ArrayList<String>;)getIntent().getSerializableExtra("Namensliste");

    final ArrayAdapter <String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,namensliste);
    liste1.setAdapter(adapter);

}
//Zurück-Button



@Override
public void onClick(View view) {
    Intent Intent = new Intent(this , MainActivity.class);
    startActivity(Intent);
    this.finish();
}
//Geh zur MainActivity

}

PS: bin noch sehr unerfahren in Android Studio und Java allgemein. Könnt ruhig alle Fehler anmarkern.

Kommentieren
Beste Antwort
Jokel
  • Forum-Beiträge: 1.527

24.06.2018, 21:41:30 via Website

Hi
hier in diesem Code schickst du den falsche Intent ab.

case R.id.fertig:
Intent Intent1 = new Intent(this, Ausgabe.class);
Intent1.putStringArrayListExtra("Namensliste",namensliste);
Intent Intent = new Intent(this , Ausgabe.class);
startActivity(Intent);
this.finish();
break;

du must den "Intent1" abschicken nicht deinen neuen "Intent"
Übrigens schreibt man nur Klassen Gross Variablen kein.
somit kommt in der zweiten Activity kein putExtra an.

case R.id.fertig:
Intent intent1 = new Intent(this, Ausgabe.class);
intent1.putStringArrayListExtra("Namensliste",namensliste);
startActivity(intent1);
this.finish();
break;

Hilfreich?
Popcorn2101
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.06.2018, 21:06:39 via App

Hallo Popcorn2101,
wie sieht denn das ErrorLog im LogCat aus?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Popcorn2101
  • Forum-Beiträge: 5

24.06.2018, 21:10:07 via Website

FATAL EXCEPTION: main
Process: com.example.daniel.namensortieren, PID: 7292
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.daniel.namensortieren/com.example.daniel.namensortieren.Ausgabe}: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
    at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:337)
    at android.widget.ListView.setAdapter(ListView.java:491)
    at com.example.daniel.namensortieren.Ausgabe.onCreate(Ausgabe.java:38)
    at android.app.Activity.performCreate(Activity.java:6237)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

06-24 18:39:45.723 7292-7292/com.example.daniel.namensortieren I/Process: Sending signal. PID: 7292 SIG: 9

das hier ich kann damit null anfangen

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.06.2018, 21:36:06 via App

Solltrst du lernen ;)

Null Pointer Exception sagt, dass ein Objekt zur Laufzeit null ist, d.h. keine Instanz hat. Somit kann deine ArrayListe aus dem Intent nicht gelesen werden.
Du darfst das mit dem new ArrayAdapter nur machen wenn namensliste != null und dann prüfen warum die überhaupt null ist.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Popcorn2101
Kommentieren
Popcorn2101
  • Forum-Beiträge: 5

24.06.2018, 21:40:48 via Website

Warum darf die denn nicht null sein. bzw wie ändere ich das?

sorry, hab echt null ahnung davon (thinking)

Hilfreich?
Kommentieren
Beste Antwort
Jokel
  • Forum-Beiträge: 1.527

24.06.2018, 21:41:30 via Website

Hi
hier in diesem Code schickst du den falsche Intent ab.

case R.id.fertig:
Intent Intent1 = new Intent(this, Ausgabe.class);
Intent1.putStringArrayListExtra("Namensliste",namensliste);
Intent Intent = new Intent(this , Ausgabe.class);
startActivity(Intent);
this.finish();
break;

du must den "Intent1" abschicken nicht deinen neuen "Intent"
Übrigens schreibt man nur Klassen Gross Variablen kein.
somit kommt in der zweiten Activity kein putExtra an.

case R.id.fertig:
Intent intent1 = new Intent(this, Ausgabe.class);
intent1.putStringArrayListExtra("Namensliste",namensliste);
startActivity(intent1);
this.finish();
break;

Hilfreich?
Popcorn2101
Kommentieren
Popcorn2101
  • Forum-Beiträge: 5

24.06.2018, 21:45:20 via Website

@Jokel
der eine intent war das er mir die andere Activity wechelt. kann ich beide zusammenpacken? also so wie du es mir geschrieben hast

Hilfreich?
Kommentieren
Popcorn2101
  • Forum-Beiträge: 5

24.06.2018, 21:52:06 via Website

Ja das war's.:D
Vielen Danke Jokel und Pascal P.
Ihr habt mir so den A** gerettet :D(cool)

Hilfreich?
Kommentieren