Próba zmiany textview z wątku kończy się NullPointerException

0

Witam,
próbuję w wątku zmienić wartość TextView, jednak gdy próbuję utworzyć obiekt TextView to aplikacja mi sie wykrzacza i wywala mi java.lang.NullPointerException.

Mój kod:

public class TimeReceive extends Activity implements Runnable {
    private int timeTest;
    private Context ctx;
    public TimeReceive(Context ctx, int time, TextView tv) {

        this.ctx=ctx;
        timeTest = time;
    }

    @Override
    public void run() {

        runOnUiThread(new Runnable() {
            public void run() {
                TextView tvTime = (TextView) findViewById(R.id.tvTime);
                tvTime.setText(Integer.toString(timeTest));
                makeToast("dziala");


            }
        });
    }

    private void makeToast(String s) {
        Toast t = Toast.makeText(ctx, s, Toast.LENGTH_LONG);
        t.show();
    }
}

Logcat:

06-16 17:22:34.152  16426-16426/lalo.ti.appti E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: lalo.ti.appti, PID: 16426
    java.lang.NullPointerException
            at android.app.Activity.findViewById(Activity.java:1887)
            at lalo.ti.appti.TimeReceive$1.run(TimeReceive.java:30)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5050)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)

Z tego co pamiętam to kiedyś robiłem to tak samo i wtedy z tego co pamiętam nie wywalało mi java.lang.NullPointerException. Jednak wtedy miałem tylko jedno activity a teraz mam dwa activity ale to chyba raczej nie przez to.

0

Sprawdz czy id tego TextView jest w xml ktore uzywasz w Activity... Zaraz zaraz, Twoje Activity nie ma widoku...
Swoja droga, to pisanie metody Runnable.run() ktora momentalnie robi dispatch na main thread jest totalnie bez sensu - wykonuj wszystko na watku glownym i bedziesz mial taki sam efekt (nie twierdze ze to jest dobre, twierdze tylko ze Twoje wykonanie wielowatkowosci jest bez sensu).

0

@mućka_
W jednym z plików xml aktywności jest TextView o takim id.
To nie jest Activity tylko moja klasa dziedziczy po klasie Activity by móc użyć:

runOnUiThread(new Runnable() {
            public void run() {

które pozwalają np. na wyświetlenie Toastu przez wątek niemający interfejsu. Kiedyś (pisałem wtedy inny program) też normalnie działało mi odwołanie do elementów interfejsu i mogłem zmieniać wartość TextView znajdującego się w ActivityMain, jednak teraz nie wiem czemu findViewById zwraca null. Możliwe, że jest to spowodowane tym, że wtedy posiadałem tylko ActivityMain. A teraz główne Activity otwiera drugie Activity i w nim dopiero próbuję uruchomić dodatkowy wątek.

0

Kto tworzy to ReceiveActivity? Ty za pomoca new czy Android kiedy je pokazuje? Jesli ty, to po pierwsze primo - you are doing it wrong, po drugie primo - skad oczekujesz ze to Activity bedzie wiedzialo cos o jakims id z xml z innego Activity?

1
TextView tvTime = (TextView) activity.findViewById(R.id.tvTime);

?

0

Autorowi tematu polecam jakiś podstawowy kurs androida, bo to co jest w pierwszym poście to jest jakiś kosmos.Nigdy nie ma potrzeby tworzenia ani wywoływania konstruktora dla aktywności (nigdy!).

0

To nie jest Activity tylko moja klasa dziedziczy po klasie Activity by móc użyć:

To też jest kosmos. To tak jakby klasa Człowiek dziedziczyła po klasie Koza, jak chcesz wywołać jakieś androidowe metody to tworzysz własną zwykłą klasę z metodami, które jako argument przyjmują Activity lub Context (ale nie tworzysz ich jako pola danej klasy, ewentualnie jako WeakReference).

1 użytkowników online, w tym zalogowanych: 0, gości: 1