• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd przy próbie przekazania widoków mainActivity do innej klasy

–1 głos
71 wizyt
pytanie zadane 6 września 2018 w Java przez kvbq Obywatel (1,300 p.)

Próbuję stworzyć funkcje w MainActivity, która przekaże swoje widoki do innej klasy. Jeśli się nie mylę powoduje to błąd w aplikacji. Zapis z logów :

FATAL EXCEPTION: main
                                                   Process: com.example.pc.connect3, PID: 15077
                                                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.pc.connect3/com.example.pc.connect3v2.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988)
                                                       at android.app.ActivityThread.-wrap14(ActivityThread.java)
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)
                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                       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)
                                                    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
                                                       at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:116)
                                                       at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:147)
                                                       at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:27)
                                                       at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:50)
                                                       at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java:29)
                                                       at android.support.v7.app.AppCompatDelegateImplN.<init>(AppCompatDelegateImplN.java:29)
                                                       at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:197)
                                                       at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:181)
                                                       at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:521)
                                                       at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190)
                                                       at com.example.pc.connect3v2.MainActivity.dajpole1(MainActivity.java:397)
                                                       at com.example.pc.connect3v2.AI.<init>(AI.java:17)
                                                       at com.example.pc.connect3v2.zmienneGlobalne.<init>(zmienneGlobalne.java:12)
                                                       at com.example.pc.connect3v2.MainActivity.onCreate(MainActivity.java:471)
                                                       at android.app.Activity.performCreate(Activity.java:6942)
                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2880)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988) 
                                                       at android.app.ActivityThread.-wrap14(ActivityThread.java) 
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631) 
                                                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                       at android.os.Looper.loop(Looper.java:154) 
                                                       at android.app.ActivityThread.main(ActivityThread.java:6682) 
                                                       at java.lang.reflect.Method.invoke(Native Method)

 

W szczegółach to stworzyłem nową klasę, która ma być odpowiedzialna za ruch koputera

package com.example.pc.connect3v2;

import android.widget.ImageView;

import java.util.Random;

/**
 * Created by PC on 06.09.2018.
 */

public class AI {

    String kto;
    int glownaFunkcja=1;
    int podfunkcja=0;
    MainActivity klasaGlowna = new MainActivity();
    ImageView pole1=klasaGlowna.dajpole1();
    ImageView pole2=klasaGlowna.dajpole2();
    ImageView pole3=klasaGlowna.dajpole3();
    ImageView pole4=klasaGlowna.dajpole4();
    ImageView pole5=klasaGlowna.dajpole5();
    ImageView pole6=klasaGlowna.dajpole6();
    ImageView pole7=klasaGlowna.dajpole7();
    ImageView pole8=klasaGlowna.dajpole8();
    ImageView pole9=klasaGlowna.dajpole9();


    public void setKto(String kto1)
    {

        kto=kto1;

    }

    public String dajKto()
    {

        return kto;

    }

    public int dajGlownafunkcje()
    {

        return glownaFunkcja;

    }

    public int dajpodfunkcje()
    {

        return podfunkcja;

    }

    public void setGlownaFunkcja(int gfunkcja)
    {

        glownaFunkcja=gfunkcja;

    }

    public void setPodfunkcja(int funkcja)
    {

        podfunkcja=funkcja;

    }

    public void gracz1x1()
    {

        Random random = new Random();

        int liczba = random.nextInt(4);

        if(liczba==0)
        {
            pole1.animate().rotation(180);
            pole1.setImageResource(R.drawable.krzyzyk);
        }else if (liczba==1)
        {
            pole3.animate().rotation(180);
            pole3.setImageResource(R.drawable.krzyzyk);

        }else if (liczba==2)
        {
            pole7.animate().rotation(180);
            pole7.setImageResource(R.drawable.krzyzyk);

        }else if (liczba==3)
        {
            pole9.animate().rotation(180);
            pole9.setImageResource(R.drawable.krzyzyk);

        }


    }

    public void FunkcjeAI()
    {

        if(kto=="gracz")
        {

           if(glownaFunkcja==1)
           {
               if(podfunkcja==1)
                gracz1x1();

           }

        }else if (kto=="komputer")
        {

            ;


        }else
        {
            System.out.println("Nie wybrany ani komputer ani gracz");
        }

    }


}

Chciałem wypróbować czy działa na razie z tylko jedną możliwością. Niestety aplikacja od razu się zamyka a ja nie wiem gdzie jest błąd bo przecież wysłałem zmienne poprawnie. Kod na dole:

public ImageView dajpole1()
    {

        ImageView pole1 = (ImageView) findViewById(R.id.imageView4);
        return pole1;

    }

    public ImageView dajpole2()
    {

        ImageView pole1 = (ImageView) findViewById(R.id.imageView5);
        return pole1;

    }

    public ImageView dajpole3()
    {

        ImageView pole1 = (ImageView) findViewById(R.id.imageView6);
        return pole1;

    }

    public ImageView dajpole4()
    {

        ImageView pole1 = (ImageView) findViewById(R.id.imageView7);
        return pole1;

    }

    public ImageView dajpole5()
    {

        ImageView pole1 = (ImageView) findViewById(R.id.imageView8);
        return pole1;

    }

    public ImageView dajpole6()
    {

        ImageView pole1 = (ImageView) findViewById(R.id.imageView9);
        return pole1;

    }

    public ImageView dajpole7()
    {

        ImageView pole1 = (ImageView) findViewById(R.id.imageView10);
        return pole1;

    }

    public ImageView dajpole8()
    {

        ImageView pole1 = (ImageView) findViewById(R.id.imageView11);
        return pole1;

    }

    public ImageView dajpole9()
    {

        ImageView pole1 = (ImageView) findViewById(R.id.imageView12);
        return pole1;

    }

I jeszcze trochę tego co miało się stać w mainActivity

 ImageView poleNaPlan = (ImageView) pole;

        if(zmienne.ilGraczy==1) {
            if (komputer.dajKto() == "gracz") {
                if (komputer.dajGlownafunkcje() == 1) {
                    if (komputer.dajpodfunkcje() == 0) {

                        if (poleNaPlan.getTag() == "1")
                            komputer.setPodfunkcja(1);

                    }
                }
            }

            komputer.FunkcjeAI();
        }
 //zmienne to jeszcze inna klasa ale w niej nie było wcześniej problemów

 

komentarz 6 września 2018 przez mbabane Maniak (71,540 p.)
Umieść błąd także w bloku dla kodu.

1 odpowiedź

–1 głos
odpowiedź 6 września 2018 przez JAKUBW Pasjonat (21,640 p.)
wybrane 8 września 2018 przez kvbq
 
Najlepsza

Twój kod jest tragiczny. Po pierwsze to nie programuje się po polsku. A tym bardziej nie miesza się dwóch języków! (no chyba, że jesteś programistą PKP, ich kod to też ochyda). 

Po drugie nie umiesz porównywać Stringów w Javie. Powtórz podstawy programowania w Java zanim weźmiesz się za poważne pisanie! 

Dlaczego masz NullPointerException? bo robisz to:

MainActivity klasaGlowna = new MainActivity();

NIGDY nie tworzy się w ten sposób obiektów Activity ani Service! Nie rozumiesz jak działa API Androida i jak się w nim pisze. Ogarnij jakąś dokumentacje (developer.android.com) 

Nie wiem jak ci się udało napisać cokolwiek bez błędu, ale to jest jakaś masakra.

2
komentarz 7 września 2018 przez Tomasz Rogalski Bywalec (2,800 p.)

Twoje zachowanie jest nieodpowiednie a ton twojej wypowiedzi jest agresywny zamiast być pouczający.

Nie wiem jak ci się udało napisać cokolwiek bez błędu, ale to jest jakaś masakra.

Może i popełnił błąd ale to jak się odzywasz jest karygodne.

1
komentarz 8 września 2018 przez kvbq Obywatel (1,300 p.)
Trochę agresywny to fakt ale mimo wszystko wypowiedź mi pomogła i pomyślałem i udało mi się przekazać widoki w inny sposób.

Dla osób które tu trafia z tym samym problemem to moje rozwiązanie polega na stworzeniu funkcji w activity main które przypiszą widoki do innej klasy zamiast wysyłać te widoki i dopiero w innej klasie przypisywać; nastepnie funkcje te wywołać przy onCreate klasy activity main

Podobne pytania

0 głosów
0 odpowiedzi 149 wizyt
pytanie zadane 2 października 2017 w Java przez kam773 Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 69 wizyt
pytanie zadane 13 kwietnia 2016 w Java przez piekarnik Użytkownik (720 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

67,210 zapytań

114,168 odpowiedzi

241,977 komentarzy

45,828 pasjonatów

Przeglądających: 342
Pasjonatów: 5 Gości: 337

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...