• 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

VPS Starter Arubacloud
–1 głos
161 wizyt
pytanie zadane 6 września 2018 w Java przez kvbq Obywatel (1,490 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 Szeryf (79,280 p.)
Umieść błąd także w bloku dla kodu.

1 odpowiedź

–1 głos
odpowiedź 6 września 2018 przez JAKUBW Nałogowiec (33,470 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,490 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 209 wizyt
pytanie zadane 2 października 2017 w Java przez kam773 Nowicjusz (120 p.)

92,455 zapytań

141,263 odpowiedzi

319,100 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...