Caused by: java.lang.NullPointerException . Kann jemand helfen ?

  • Antworten:30
  • Bentwortet
german278
  • Forum-Beiträge: 15

26.06.2019, 01:49:01 via Website

Ich habe mir schon den Kopf ausgebrochen wegen diesem Fehler ... Ich weiß der Fehler ist schon oft auf seiten aber irgendwie versteh ich den trotzdem nicht ... Hier ist noch meine Mainactivity und xml datei .... :

    private Button button;

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

    Button button = findViewById(R.id.button1);

    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            openanmeldung();
        }
    });











    BottomNavigationView navigation = findViewById(R.id.bottomnav);
    navigation.setOnNavigationItemSelectedListener(this);


    getSupportFragmentManager().beginTransaction().replace(fragment_container, new Home_Screen()).commit();


}



private void openanmeldung(){
    Intent intent = new Intent(MainActivity.this,AnmeldungButton.class);
    startActivity(intent);
}

Das ist zwar nur ein bischen Code aber ich bin mir sicher da liegt der Fehler :....
Und hier nochmal die xml datei :

<android.support.v7.widget.CardView

        android:layout_width="match_parent"
        android:layout_height="173dp"
        app:cardCornerRadius="8dp"
        android:layout_marginTop="80dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        >

    <Button
            android:text="Mehr infos"
            android:layout_width="120dp"
            android:layout_height="35dp"
            android:id="@+id/button1"
            android:layout_weight="1"
            android:layout_marginTop="130dp"
            android:layout_marginRight="170dp"

            />


    <LinearLayout android:layout_height="match_parent"
                  android:layout_width="match_parent"
                  android:background="@color/maincolor"

            >

    </LinearLayout>

    <TextView android:layout_height="wrap_content"
              android:layout_width="wrap_content"
              android:textColor="@color/white"
              android:text="HPI - 29.06.19"
              android:textSize="24dp"
            />

    <TextView android:layout_height="wrap_content"
              android:layout_width="wrap_content"
              android:textColor="@color/white"
              android:text="Sitzung: H-E.51"
              android:textSize="16dp"
              android:layout_marginTop="40dp"

            />
    <TextView android:layout_height="wrap_content"
              android:layout_width="wrap_content"
              android:textColor="@color/white"
              android:text="Juni22, 2019"
              android:textSize="16dp"
              android:layout_marginTop="40dp"
              android:layout_marginRight="20dp"
              android:layout_marginLeft="270dp"






            />
        </android.support.v7.widget.CardView>

Das ist auch nur ein teil der Xml datei aber der Button ist halt das wichtigste .. Und hier nochmal die Java datei zu der Xml datei ... :

package com.example.myapplication2;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class TermineFragment extends Fragment {

@Override


public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);






}



@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.activity_3,container,false);
}

}

Hier noch der fehler :

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
    at com.example.myapplication2.MainActivity.onCreate(MainActivity.java:44)

Ich meine ich habe schon den Fehler gefunden ... Im prinzip unzwar das dieser Setcontent View den Button nicht erkennt da dieser nicht in meiner activity main ist sonder in activity_3 , aber wenn ich activity_3 einsetzte dann erkennt er meine Nav Bar nicht und diese ist in Activity_main.xml drinne und das ist halt im PRinzip das Problem .... Falls ihr mehr braucht für die Problemlösung sende ich es hier rein ich meine Code etc.

Danke für jeden der mir antwortet .... Ich hoffe ihr versteht mich und meinen Fehler ...

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

29.06.2019, 19:51:57 via Website

Dein this im intent ist wieder falsch. Du hast keinen Kontext der activity.
Entweder getActivity. Wenn es geht.
Oder eben den context aus der onattach.
Erstelle eine context variable am Anfang im Klassen Rumpf.
Context context ;

Onattach( Context c) {

context = c;
}

Im listner
Intent(context.this,AnmeldungButton.class)

Oder eben getActivity()

Aber wo ist den der Button den du benutzt in den fragment layout oder in der neuen gestarteten activity? Das wäre interessant um dir richtige Ratschläge zu geben.

Glaube du hast es immer noch nicht verstanden obwohl du es behauptest.

Im fragment brauchst du den Kontext der activity. In der activity reicht this.

Um an den Kontext zu kommen gibt es verschiedene Wege und zwei haben wir dir nun gezeigt.
Im fragment immer den Kontext mit angeben . Nochmal sage ich es nicht.

Die fragment Klasse läuft Inder activity. deshalb der Kontext der activity in dem intent oder find... In der Fragment klasse ist this alleine nicht der context der activity. Sondern des fragment. Solte aber nun wirklich klar sein.

Hilfreich?
Kommentieren
Gelöschter Account
  • Forum-Beiträge: 79

26.06.2019, 08:48:32 via Website

An welcher Stelle tritt der Fehler denn auf? Schon beim starten oder erst, wenn du den Button drückst?

Steht in der Fehlermeldung noch mehr? Mir kommt es so vor, als müsste die länger sein. In der Meldung steht ja auch was von Zeile 44, nur leider stehen hier beim Code keine Zeilennummern dabei...

Eine Sache ist mir an dem Code aufgefallen, die aber eigentlich sogar einen Kompilierfehler auslösen müsste und nicht eine NullPointerException:

private void openanmeldung(){
    Intent intent = new Intent(MainActivity.this,AnmeldungButton.class);
    startActivity(intent);
}

Du übergibst hier dem neuen Intent MainActivity.this, obwohl dort eigentlich nur this stehen müsste.

— geändert am 26.06.2019, 08:50:04

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

26.06.2019, 08:58:31 via Website

@Robert: MainActivity.this ist in einer Activity das selbe wie nur this.

@TE:
Der Button auf den du den OnCklickListener setzen willst ist null.
Das heit er wird auf dem Layout der MainActivity nicht gefunden. Ist da ein Button der auch die passende android:id hat?

Zudem sagen die Fehlermeldungen auch in welcher Zeile das Problem ist, damit lässt es sich schneller finden.
Und die Überschattung der Variable Button kann auch zu unschönen Effekten führen...

Ach ja und wenn der Button auf dem Fragment ist musst du den Click auch in der Klasse des Fragments behandeln und den Button auf dem Layout finden.
Layout und Activity/Fragment müssen immer zusammen passen

— geändert am 26.06.2019, 09:00:14

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

Hilfreich?
Jokel
Kommentieren
german278
  • Forum-Beiträge: 15

27.06.2019, 01:07:27 via Website

Jo @pascal erstmal danke für deine Antwort und ich kenn auch schon die Zeile wo das Problem ist ...
unzwar in dieser hier : Button button = findViewById(R.id.button1);
Das Problem kenne ich ja schon und die "behandlung" eigentlich ja auch einfach den content view auf die richtige XML datei setzten und das wars ...
Aber ich habe da ja noch die Bottom Nav bar ... Die ist auch noch in der activity main drinne das heißt dann das wenn ich activity main setzen würde dass meine Nav bar dann nicht gehen würde ... Deswegen frage ich ja auch ob man das eventuell anders machen könnte so eine Art oncreate 2 mit einer andere ContentView .. Ich meine ich könnte ja meine Nav bar auch nicht in der acitivty main machen sonder wo anders aber im endeffekt würde das beides nicht zusammenpassen ... Ich will einfach Das mich dieser Button zu einer neuen activity bewegt aber dieser Button ist halt nicht in der activity main ... :(
Trotzdem Danke ich hoffe wir können mein Problem lösen ...

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

27.06.2019, 07:23:21 via Website

Hallo wie dir Pascal schon erklärte verwechselst du Fragment und activity.
Du kannst in der Main acttivity nicht das layout neu laden.
In dem layout in dem der drawer ist, ist auch der Container Platzhalter in dem dein Fragment layout eingeblendet wird.
Das Fragment läuft arber in seiner eigenen klasse innerhalb der activity.
Also deinen Button musst du in der Fragment klasse bearbeiten. Auch dort machst du das findviewbyid musst aber vor dem find... den Context der Aktivity setzen. Wie es Pascal such schon sagte.

Schaue dir das Prinzip Fragment und activity noch mal genauer an. Du hast hier einen großen denkfehler. Ein drawer und nur eine mainactivity ohne Fragment Klasse. Geht nicht.
Auch ist das starten austauschen der Fragmente etwas anders als das starten einer neuen activity. Geht nicht mit einem intent.

— geändert am 27.06.2019, 14:20:13

Hilfreich?
german278
Kommentieren
german278
  • Forum-Beiträge: 15

28.06.2019, 00:16:30 via Website

Gut ich schaue es mir nochmal genau an also das Fragment und activity unterschied ... Aber kannst du mir eventuell sagen was ich jetzt genau machen soll also was du mit dem Container meinst und so ...
Muss ich jetzt also nichts in meiner Mainactivity machen sondern in der java datei wo meine activity_3 ist machen und den Button dort bestimmen und den onclickListener dort setzen oder wie ... ?
Würde mich über eine weitere Antwort freuen ...

Hilfreich?
Kommentieren
german278
  • Forum-Beiträge: 15

28.06.2019, 02:28:46 via Website

Ahso und nochmal Pascal ...
Ich verstehe es nicht ganz wie ich jetzt meinen Button in meiner AnmledungButton.java klasse machen soll also was ich hinschreiben soll ....
Weil wenn ich in meiner Klasse schreibe wo ich den Button habe , kann ich nicht findViewById schreiben also es geht nicht ... Ich hoffe ich habe alles richtig verstanden....
Könntest du mir eventeull nochmal den Code schreiben ich glaube es ist nicht viel Code ... Wäre dir aufjedenfall sehr dankbar , da mich dieses Problem lange schon verfolgt und ich gerne weiterkommen möchte ....
Würde mich sehr freuen . Danke !

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

28.06.2019, 07:30:11 via Website

Zum Thema drawer was genau meist du den eigentlich? Welche Art von drawer.

Indem activity layout hast du normalerweise ein layout wo nichts drin ist das ist dein Container in dem dann das layout des Fragment eingeblendet wird.

Ja deinen Button wenn er im Fragment ist muust du auch in der Klasse vom fragment behandeln. Nicht in der activity.
Du brauchst arber der Klasse den Kontext der activity um mit findviewbyid zu arbeiten.

Bin momentan nur Am Handy und da ist coden schlecht.

— geändert am 28.06.2019, 15:09:28

Hilfreich?
Kommentieren
Gelöschter Account
  • Forum-Beiträge: 79

28.06.2019, 08:34:39 via Website

Ich kenne mich mit Fragments nicht so gut aus, aber ich glaube, es ist gemeint, dass du den Button nicht in der MainActivity initialisieren musst, sondern in deiner TermineFragment Klasse.
Es kann sein, dass er "findViewById()" dort nicht kennt, aber soweit ich weiß gibt es im Fragment die Funktion "getActivity()", wo du dann das "findViewById()" hinter setzen kannst. Glaube ich zumindest. ^^

Aber mal eine andere Frage: Was macht deine App eigentlich, bevor man auf den Button drückt? Ist die Einteilung deiner Activity in Fragments überhaupt notwendig? Gerade wenn man mit objektorientierter Programmierung noch nicht so viel Erfahrung hat, sollte man es vielleicht mit Fragments und so nicht übertreiben.
Ein Bekannter von mir hat sich auch Mal die Zähne daran ausgebissen, eine TabbedActivity zu machen, obwohl es dann nachher auch eine einzige Activity getan hat. :)

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

28.06.2019, 10:37:05 via Website

@Robert: Nein das ist auch falsch.
Mit getActivity().findView.... holst du wieder Views von der Activity.
Du musst das im Fragment in der onCreate View machen und dabei die View v nehemen die über den Inflater geht.

View v = LayoutInflater.inflate(...)
v.findViewById(R.id.button1);...

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

Hilfreich?
german278
Kommentieren
swa00
  • Forum-Beiträge: 3.704

28.06.2019, 11:38:16 via Website

@Robert

Wir begrüßen in unserer kleinen Developer-Gruppe jegliche Hilfe für die Fragensteller und du bist herzlichst willkommen.

Jedoch vielleicht wäre es an der einen oder anderen Stelle deinerseits ein wenig sinnvoller,
nur dann auch zu antworten, wenn du dir 100 % sicher bist oder Links / API Dokumentation mit dazu reichst.

"Glaube ich zumindest" oder unkorrekte Darstellungen (hier und anderer Thread) helfen i.d.R nicht weiter.
Es macht auch keinen Sinn , wenn wir einige Antworten von Dir im nachhinein erstmal korrigieren müssen und somit der TE verwirrt wird.

— geändert am 28.06.2019, 12:56:08

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Jokel
Kommentieren
german278
  • Forum-Beiträge: 15

28.06.2019, 15:45:41 via Website

Hallo Pascla nochmal ... Ich verstehe nicht ganz was du mit dem Inflate meinst .. Ich meine ich weiß was das heißt aber ich habe bereits in meiner OnCreateView von meinem TermineFragment.java bereits diesen Code...

package com.example.myapplication2;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class TermineFragment extends Fragment {

private Button button;



@Override

public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);










}



@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.activity_3,container,false);


}

}

Ist dieser Falsch oder was muss ich hier noch was dazufügen ?

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

28.06.2019, 16:04:05 via Website

Naja schau her:

public class TermineFragment extends Fragment {

private Button button;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}



@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.activity_3,container,false);
    button = v.findViewById(R.id.button1); //Hier aufs Layout der View v beziehen, und das immer im Fragment, nachdem das als View erstellt wurde

return v; //View zurückgeben

}

}

Ist jetzt klarer geworden was ich mit dem Inflater des Layouts in der onCreateView meine?
Auf diese View musst du dich im Kontext des Fragments beziehen.

Vielleicht schaust du dir wirklich mal die Grunlagen zu Activity und Fragment an. Erst dann versthst du wirklich was du tust.

— geändert am 28.06.2019, 16:05:41

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

Hilfreich?
Kommentieren
german278
  • Forum-Beiträge: 15

28.06.2019, 16:33:13 via Website

@Jokel ich verstehe nicht ganz was du meinst . Ich brauche einen Kontext in meiner Klasse um mit findviewById arbeiten zu können . Kannst du das bitte noch mal schreiben bzw genauer erklären .. Verstehe wirklich irgendwie nicht was du meinst .
Danke trotzdem

Hilfreich?
Kommentieren
german278
  • Forum-Beiträge: 15

28.06.2019, 17:01:07 via Website

@Pascal Danke erstmal für den Code und ja ich habe es verstanden , muss nur mal bischen wegen activity und fragment nachhacken aber sonst verstehe ich es ...
Das Problem bei mir ist halt jetzt , dass ich ja will das dieser Button mir eine Activity öfnett und ich habe eigentlich den richtigen Code dazu geschrieben nur erkennt er es irgendwie nicht wenn ich den "Intente"
Hier mal der Code :

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_3,container,false);
button = v.findViewById(R.id.button1);

   button.setOnClickListener(new View.OnClickListener(){

       @Override
       public void onClick(View v) {
           Intent intent = new Intent(TermineFragment.this,AnmeldungButton.class);
           startActivity(intent);
       }
   });


   return v;





}

Mache ich irgendwas falsch ? Bei mir wird diese Zeile nicht erkannt :
new Intent(TermineFragment.this,AnmeldungButton.class);
Also TermineFragment.this,AnmeldungButton.class ist rot unterstrichen und dort steht halt als fehlermeldung :

Cannot resolve constructor 'Intent(com.example.myapplication2.TermineFragment, java.lang.Class)'

Weiß nicht was damit anfangen . Bei Stack meinen sie das ich nur this lassen soll . Habe ich gemacht funkt nicht . Vielelicht kannst du mir weiterhelfen ... :)

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

28.06.2019, 17:45:45 via App

Fürs Intent brauchst du wieder die Activity d.h. new Intent(getActivity(),...);

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

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

28.06.2019, 17:45:48 via Website

Was ich mit Content der activity meinte kannst du mit dem view was du in der onCrateView erstellst gleichsetzen.

Zu deinem letzten Code
Mache mal nicht die variable v zweimal, sind zwar verschiedene ist aber unübersichtlich.

Für den intent brauchst du auch das view vom infater.
Eigentlich den Kontext der activity. Kannst es ja mal mit der view testen ob es geht ,ich glaube aber eher nein.

Intent(v.this,AnmeldungButton.class);
Mit v meine ich nicht das v aus dem listner, sondern die view.

Oder den Kontext der activity den du dir mit getActivity() holen kanst.
Problem ist nur das ab API 28 diese Methode depreatet ist.
Deshalb hole ich mir den context immer in der onAttacht Methode und speichere ihn in eine Klassen variable.

Du willst ja aus einem Fragment was in einer activity läuft eine neue activity starten. Deshalb braucht du auch den Bezug zur activity. mit nur this hast du den nicht.

Was hast du bis jetzt für einen Kontext genommen? Ich denke das this und das ist in einer Activity auch richtig. im Fragment ist this alleine nicht richtig. Du brauchst das This der activity also den Kontext.

— geändert am 28.06.2019, 19:06:51

Hilfreich?
german278
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

28.06.2019, 19:58:54 via Website

Verstehe wirklich irgendwie nicht was du meinst .

Ist genau das was pascal für mit der View gezeigt hat.

Nur wenn du nicht mehr in der onCeateView Methode bist hast du die View nicht mehr.
Da für mußt du dir entweder die View in einer Klassen Variablen Speichen. Aber besser und einfacher ist es den context der activity zubenutzrn. Denn du ja für den Intent auch brauchst.

Somit kannst du Dann auch alles in der onActivityCreated machen was der onCreate der activity gleich kommt. Denn für Methode wird aufgerufen dachdem die View also das Layout erstellt wurde.

Schaue dir den livevcyle an.

OnAttach wird noch vor der onCreate aufgerufen und beinhaltet den Context der activity den du sinniger weiße in einer Klassen Variablen speichern solltest. Und so auch überall benutzen kannst.

Wie ich auch schon sagte wird getActivity nicht mehr an api 28 unterstützt. Da bleibt dir nur onAttach.

Ich hoffe es ist nun klar geworden.

Hilfreich?
Kommentieren
german278
  • Forum-Beiträge: 15

28.06.2019, 21:30:43 via Website

@Pascal Perfekt . Hat fast alles geklappt . Habe auch das Intent mit getactivity gemacht und so ...
Nur jetzt kommt leider gottes wieder eine Fehlermeldung unzwar :

at android.support.v4.app.Fragment.startActivity(Fragment.java:1073)
at com.example.myapplication2.TermineFragment$1.onClick(TermineFragment.java:50)

Ich meine im Code scheint kein Fehler zu sein ...
Das ist die 50 Zeile :
Intent intent = new Intent(getActivity(),AnmeldungButton.class);
startActivity(intent);

Die startActivity(intent) ist es ...
Scheint irgendein Fehler zu sein im onclick ...
Weißt du oder andere woran das liegen kann ?

Danke trotzdem schonmal sehr ...

Hilfreich?
Kommentieren
german278
  • Forum-Beiträge: 15

28.06.2019, 21:39:06 via Website

@Jokel ahsooo , deswegen habe ich ja jetzt auch anscheinend den fehler , da getActivity nicht mehr benutzt wird richtig ? Im code scheint ja alles zu stimmen trotzdem habe ich einen Fehler in meiner onclick methode ...
Das ist interessant .... Nagut unten habe ich mal meinen Fehler beschrieben , habe auch onAttach versucht aber ist irgendwie nicht gegangen bzw hat nicht so funktioniert ... Kann man überhaupt Intent mit Onattach benutzen , da mein Code im moment so aussieht mit onAttach :

@Override
public void onClick(View v) {
Intent intent = new Intent(onAttach(AnmeldungButton.class));
startActivity(intent);
}

Und irgendwie funktioniert es nicht .... Bei mir wird die AnmeldungButton.class rot unterstrichen und als fehler halt wieder der hier :

Cannot resolve method 'onAttach(java.lang.Class)'

Kannst du mir das irgendwie erklären oder einen Link schiken oder so weil getActivity hats geklppt aber der unten gennante fehler kam halt ... Hier ist es der Code ... Weiß echt nicht was abgeht
Trotzdem vielen Danke hoffe noch was von dir zu hören :)

Hilfreich?
Kommentieren
german278
  • Forum-Beiträge: 15

28.06.2019, 21:58:15 via Website

@Jokel Nochmal zu dem Post von intent v.this und so ...
Ich habe es versucht aber der intent erknnt dieses v nicht ... Er unterstreicht mir das v und schreibt ich brauche einen klassennamen dort ... Habe wirklich 1zu1 das gemacht wie du es geschrieben hast ....
Ja hatte bis jetzt this aber war halt falsch deswegen keine Ahnung ... was ich jetzt dahin schrieben soll ... Bin halt beim Intent gerade ...
Gibt es mir auch ein Fehler hier ...Bin tatsächlich bischen überfordert aber habe ja dich und Pascal die mir helfen und so ... Und ich meine ich lerne ja fürs nächste mal dann auch , dann werde ich ja wissen was zu tun ist also alles entspannt ... Hoffe ihr könnt mir noch weiterhelfen ... hier bei meinem Problem
Danke :)

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

28.06.2019, 22:13:26 via App

Hast du mal die komplette Fehlermeldung?
Hast du die Activity in der Manifest deklariert?

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

Hilfreich?
Kommentieren
german278
  • Forum-Beiträge: 15

28.06.2019, 22:26:59 via Website

Klar hier die komplette Fehlermeldung :

--------- beginning of crash
2019-06-28 21:27:20.294 27471-27471/com.example.myapplication2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication2, PID: 27471
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.myapplication2/com.example.myapplication2.AnmeldungButton}; have you declared this activity in your AndroidManifest.xml?
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1815)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1531)
at android.app.Activity.startActivityForResult(Activity.java:4399)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767)
at android.support.v4.app.ActivityCompat.startActivityForResult(ActivityCompat.java:234)
at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:881)
at android.support.v4.app.FragmentActivity$HostCallbacks.onStartActivityFromFragment(FragmentActivity.java:995)
at android.support.v4.app.Fragment.startActivity(Fragment.java:1084)
at android.support.v4.app.Fragment.startActivity(Fragment.java:1073)
at com.example.myapplication2.TermineFragment$1.onClick(TermineFragment.java:50)
at android.view.View.performClick(View.java:6199)
at android.widget.TextView.performClick(TextView.java:11090)
at android.view.View$PerformClick.run(View.java:23647)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

Und nein nicht das ich wüsste das ich die "deklariert habe" . Meinst du sowas in der art ?

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

29.06.2019, 09:55:48 via App

Ja nicht in der Manifest deklariert.
Siehe: https://stackoverflow.com/a/19122501

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

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

29.06.2019, 10:22:58 via Website

Also das setzen des listner kannst du nicht in der onattach machen die kannst du dier nie den context holen und in eine globale Klassen variable Speichen damit meine ich eine variable im Kassenrumpf am anfang.in der onAttach (Context context) Methode kannst du den übergeben context in die variable Speichen und hast in nun somit immer zur verfugung.

Ja und zu dei en Fehler wurde ich auch sagen das du vergessen hast die in der Manifest datei einzutragen. Die macht man im Amplicon Block in xml

Hilfreich?
Kommentieren
german278
  • Forum-Beiträge: 15

29.06.2019, 18:40:35 via Website

Ok , habe es zur Manifest hinzugefügt ... Mein Problem und jetzt halt auch der spannendste Teil ist jetzt wie ich den Button dazu kriege in meiner activity_3 zur benutzung kommt ...
Habe alles eigentlich im Code richtig gemacht .... doch dann kommt leider dieser Fehler :

Cannot resolve constructor 'Intent(anonymous android.view.View.OnClickListener, java.lang.Class<com.example.myapplication2.AnmeldungButton>;)'

Mein Code in TermineFragment.java :

    @Nullable
@Override
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
   View view = inflater.inflate(R.layout.activity_3,container,false);
   button = view.findViewById(R.id.button1);

   button.setOnClickListener(new View.OnClickListener(){

       @Override
       public void onClick(View v2) {
           Intent intent = new Intent(this,AnmeldungButton.class)
           startActivity(intent);
       }


   });


   return view;





}

Woran kann das liegen ? Habe doch alles hinzufügt was man braucht ...

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

29.06.2019, 18:44:28 via App

An der stelle brauchst du den Context.
This ist in einem Listener bzw. in Fragment kein Context.
Also entweder per getActivity() wie schon geschrieben oder auch den Context aus der OnAttach. Je nach den wie du es implementieren möchtest.

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

Hilfreich?
Kommentieren
german278
  • Forum-Beiträge: 15

29.06.2019, 18:58:30 via Website

Ich glaube getActivity() wird nicht unterstützt oder ? Also in API 28

Hilfreich?
Kommentieren
german278
  • Forum-Beiträge: 15

29.06.2019, 19:12:53 via Website

Und wenn this kein Context ist wie müsste es dann aussehen ?

Intent intent = new Intent(getContext(TermineFragment.this,Anmeldung.class)); 

So oder irgendwie anders ... ?

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

29.06.2019, 19:51:57 via Website

Dein this im intent ist wieder falsch. Du hast keinen Kontext der activity.
Entweder getActivity. Wenn es geht.
Oder eben den context aus der onattach.
Erstelle eine context variable am Anfang im Klassen Rumpf.
Context context ;

Onattach( Context c) {

context = c;
}

Im listner
Intent(context.this,AnmeldungButton.class)

Oder eben getActivity()

Aber wo ist den der Button den du benutzt in den fragment layout oder in der neuen gestarteten activity? Das wäre interessant um dir richtige Ratschläge zu geben.

Glaube du hast es immer noch nicht verstanden obwohl du es behauptest.

Im fragment brauchst du den Kontext der activity. In der activity reicht this.

Um an den Kontext zu kommen gibt es verschiedene Wege und zwei haben wir dir nun gezeigt.
Im fragment immer den Kontext mit angeben . Nochmal sage ich es nicht.

Die fragment Klasse läuft Inder activity. deshalb der Kontext der activity in dem intent oder find... In der Fragment klasse ist this alleine nicht der context der activity. Sondern des fragment. Solte aber nun wirklich klar sein.

Hilfreich?
Kommentieren
german278
  • Forum-Beiträge: 15

30.06.2019, 00:10:27 via Website

Hat alles geklappt und habe alles gechekt , Danke jungs für alles . Bis irgendwannmal ....

Hilfreich?
Kommentieren