• 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
59 wizyt
pytanie zadane 6 września 2018 w Java przez kvbq Obywatel (1,280 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 (67,320 p.)
Umieść błąd także w bloku dla kodu.

1 odpowiedź

–1 głos
odpowiedź 6 września 2018 przez JAKUBW Pasjonat (21,000 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,280 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 142 wizyt
pytanie zadane 2 października 2017 w Java przez kam773 Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 67 wizyt
pytanie zadane 13 kwietnia 2016 w Java przez piekarnik Użytkownik (720 p.)
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

63,241 zapytań

109,485 odpowiedzi

228,714 komentarzy

43,296 pasjonatów

Przeglądających: 322
Pasjonatów: 19 Gości: 303

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.

...