App stürzt nach Start ab

P

pagrf

Neues Mitglied
0
Hallo, da mein letztes Problem hier gelöst wurde ist dies nun mein (wahrscheinlich) letztes Problem. Meine App stürzt direkt nach dem Start ab. Ich schicke euch mal das Logcat und das Fragment in welchem ich gearbeitet habe.
Code:
Fragment:
public class polynomfunktionen_fragment extends Fragment {

    ImageView imageView;

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

        final String[] values = {"f(z)=z","f(z)=z+z^2","f(z)=z+z^2+z^3"};
        final int[] images = {R.drawable.bild2,R.drawable.bild2,R.drawable.bild3};
        imageView = (ImageView) v.findViewById(R.id.imageView);


        Spinner spinner = (Spinner) v.findViewById ( R.id.spinner1 );
        ArrayAdapter<String> adapter= new ArrayAdapter<String> (this.getActivity (),android.R.layout.simple_spinner_item ,values);
        adapter.setDropDownViewResource ( android.R.layout.simple_spinner_dropdown_item );
        spinner.setAdapter ( adapter );

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener () {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                changeImage(position,values,images);
            }

            public void onNothingSelected(AdapterView<?> parent) {
                Toast.makeText(getActivity(),"Es wurde nichts gewählt", Toast.LENGTH_LONG).show();
            }
        });

        return v;

    }


        private void changeImage(int pos,String[]values,int[]images) {
            imageView.setImageDrawable (getResources ().getDrawable (images[pos] ));
            Toast.makeText ( getActivity (),"Es wurde" + values[pos] + "gewählt",Toast.LENGTH_LONG).show ();
        }

    }
Code:
LogCat:

Process: com.example.komplexefunktionentest, PID: 28635
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageDrawable(android.graphics.drawable.Drawable)' on a null object reference
        at com.example.komplexefunktionentest.polynomfunktionen_fragment.changeImage(polynomfunktionen_fragment.java:58)
        at com.example.komplexefunktionentest.polynomfunktionen_fragment.access$000(polynomfunktionen_fragment.java:22)
        at com.example.komplexefunktionentest.polynomfunktionen_fragment$1.onItemSelected(polynomfunktionen_fragment.java:44)
        at android.widget.AdapterView.fireOnSelected(AdapterView.java:947)
        at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:936)
        at android.widget.AdapterView.access$300(AdapterView.java:56)
        at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:901)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
 
Dein ImageView ist nicht vorhanden
 
  • Danke
Reaktionen: pagrf
Das heißt was muss ich tun
 
a) Als erstes mal try/catch einbinden
b) und warum dein Pointer auf dein R.id.imageView null ist , vermagst nur du selbst zu beantworten . (XML ?)

Debugge mal step für step und schau , ob er gültig ist
 
  • Danke
Reaktionen: pagrf
Wie sieht das im Code aus?
Soll ich dir mal das XML schicken
 
was meinst du "im Code aussieht" ? Try / Catch ??
 
  • Danke
Reaktionen: pagrf
Wie muss ich das in das Fragment schreiben und wohin (bin Neuling)
 
Try & Catch ist eines der elementarsten Techniken in der Programmierung.
Es verhindert , dass das Program abstürzt und fängt gravierende Fehler ab.

Eigentlich sollte annähernd jede CodeZeile in einen solchen Block rein
Try-catch Java Example

Ohne diese Sicherheit sollte man auch kein Program auf die Menschheit loslassen :)
 
Könntest du mir das mal in meinen Code den ich geschickt habe schreiben für mich bitte :)
 
STOPP - Wir helfen ja sehr gerne, aber durch elementare Dinge musst bitte selbst durch .
Es nutzt nichts ,wenn du es vorgekaut bekommst , denn du musst es ja auch verstehen .

Der Link oben erklärt recht gut , wie das anzuwenden ist , deshalb habe ich den ja für dich schon herausgesucht :)

Und an dieser Stelle einen kleinen Tipp zur Übersicht :
Namesgebung der Resourcen sollten eindeutig sein : Bild1,2 und imageview im XML machen für dich selbst
die Übersichtlichkeit ab irgend einem Punkt undurchschaubar.
 
  • Danke
Reaktionen: pagrf
Ok. Habe es jetzt mal damit versucht. Stürzt leider immer noch ab..

Code:
public class polynomfunktionen_fragment extends Fragment {

    ImageView imageView;

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



        try{
            final String[] values = {"f(z)=z","f(z)=z+z^2","f(z)=z+z^2+z^3"};
            final int[] images = {R.drawable.bild2,R.drawable.bild2,R.drawable.bild3};
            imageView = (ImageView) v.findViewById(R.id.imageView);


            Spinner spinner = (Spinner) v.findViewById ( R.id.spinner1 );
            ArrayAdapter<String> adapter= new ArrayAdapter<String> (this.getActivity (),android.R.layout.simple_spinner_item ,values);
            adapter.setDropDownViewResource ( android.R.layout.simple_spinner_dropdown_item );
            spinner.setAdapter ( adapter );

            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener () {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    changeImage(position,values,images);
                }
                public void onNothingSelected(AdapterView<?> parent) {
                    Toast.makeText(getActivity(),"Es wurde nichts gewählt", Toast.LENGTH_LONG).show();
                }
            });


        }catch(IndexOutOfBoundsException e){
            e.printStackTrace();
        }



        return v;

    }


        private void changeImage(int pos,String[]values,int[]images) {
            imageView.setImageDrawable (getResources ().getDrawable (images[pos] ));
            Toast.makeText ( getActivity (),"Es wurde" + values[pos] + "gewählt",Toast.LENGTH_LONG).show ();
        }

    }
 
Und was sagt jetzt dein Stack-Output und dein Errorlog ?
 
Code:
 Process: com.example.komplexefunktionentest, PID: 20478
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageDrawable(android.graphics.drawable.Drawable)' on a null object reference
        at com.example.komplexefunktionentest.polynomfunktionen_fragment.changeImage(polynomfunktionen_fragment.java:67)
        at com.example.komplexefunktionentest.polynomfunktionen_fragment.access$000(polynomfunktionen_fragment.java:22)
        at com.example.komplexefunktionentest.polynomfunktionen_fragment$1.onItemSelected(polynomfunktionen_fragment.java:47)
        at android.widget.AdapterView.fireOnSelected(AdapterView.java:947)
        at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:936)
        at android.widget.AdapterView.access$300(AdapterView.java:56)
        at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:901)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
 
Deinen Fehler im XML hast du immer noch nicht heraus gemacht
Nachwievor ist dein Pointer NULL.

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageDrawable(android.graphics.drawable.Drawable)' on a null object reference
at com.example.komplexefunktionentest.polynomfunktionen_fragment.changeImage(polynomfunktionen_fragment.java:67)
at com.example.komplexefunktionentest.polynomfunktionen_fragment.access$000(polynomfunktionen_fragment.java:22)
at com.example.komplexefunktionentest.polynomfunktionen_fragment$1.onItemSelected(polynomfunktionen_fragment.java:47)
at android.widget.AdapterView.fireOnSelected(AdapterView.java:947)
 
  • Danke
Reaktionen: pagrf
Code:
java.lang.Throwable
        at com.android.server.display.ColorFade.logEglError(ColorFade.java:691)
        at com.android.server.display.ColorFade.destroyEglSurface(ColorFade.java:627)
        at com.android.server.display.ColorFade.dismissResources(ColorFade.java:334)
        at com.android.server.display.DisplayPowerState.dismissColorFadeResources(DisplayPowerState.java:267)
        at com.android.server.display.DisplayPowerController.animateScreenStateChange(DisplayPowerController.java:2417)
        at com.android.server.display.DisplayPowerController.updatePowerState(DisplayPowerController.java:1308)
        at com.android.server.display.DisplayPowerController.access$2100(DisplayPowerController.java:145)
        at com.android.server.display.DisplayPowerController$DisplayControllerHandler.handleMessage(DisplayPowerController.java:2950)
        at android.os.Handler.dispatchMessage(Handler.java:112)
        at android.os.Looper.loop(Looper.java:216)
        at android.os.HandlerThread.run(HandlerThread.java:65)
        at com.android.server.ServiceThread.run(ServiceThread.java:44)
 
Puhhhh :-(

Dein zweites posting ist kein errorlog ....
Mach doch mal bitte ein step by step debuggung und schau, ob dein Imageview überhaupt eine Instanz bekommt .

Und hier :

imageView.setImageDrawable (getResources ().getDrawable (images[pos] ));

Schau mal ob dein Array überhaupt gültig ist und setze mal zur Probe eine statische Resource ein.
P.S. Statisches Arrays sind tödlich , dynamische verwenden.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: pagrf
Puuuh... habe jetzt noch etwas rumprobiert und habe es jetzt geschafft es funktioniert :)
Vielen Dank, dass du bei so einem Anfänger wie bei mir nicht gleich die Hoffnung verlierst und dass du deine Zeit für mich geopfert hast :)
 
Das ist schön zu hören .
Dennoch : Da wir eine Community sind und jeder Profitieren soll , wäre es auch schön, du würdest dann mitteilen,
was denn schlussendlich dein Fehler war .... :)
 
  • Danke
Reaktionen: pagrf
Ich bin in die XML gegangen und habe die id meines ImageViews überarbeitet
 
... das hatte ich dir aber schon im zweiten Post angeraten :)
 
  • Danke
Reaktionen: pagrf

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
165
swa00
swa00
S
Antworten
8
Aufrufe
511
swa00
swa00
5
Antworten
22
Aufrufe
1.420
590239
5
Zurück
Oben Unten