[ Príspevkov: 4 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 01.03.13
Prihlásený: 25.04.26
Príspevky: 220
Témy: 49 | 49
Bydlisko: Sabinov
NapísalOffline : 09.07.2015 16:26 | Android - MediaPlayer a Context

Zdravím, nevedel by mi niekto poradiť s mojim problémom? Neviem aký parameter má byť v tom Context pri metóde MediaPlayer.create(Context, Uri). Ten MediaPlayer používam v jednej non-activity triede (MyCountDownTimer.class) a to je podľa mňa môj problém. Keď som najprv spravil normálne MainActivity.class a v nej vnorenú druhú triedu (MyCountDownTimer.class), tak som namiesto Context mohol písať getApplicationContext() a fungovalo to. Ale ak vytvorím samostatnú triedu, tak už getApplicationContext() nemôžem napísať a nejde mi to ani ak pošlem z prvej triedy Context ako parameter konštruktora do druhej triedy. Nevie niekto ako na to? :) prípadne aj nejaké dobré české/slovenské vysvetlenie Contextu? Vďaka :)
tu sú časti zdrojákov:
Kód:
public class MainActivity extends ActionBarActivity {

public TextView textviewTimer1;
private TextView textviewTimer2;
private MyCountDownTimer casovac1;
private MyCountDownTimer casovac2;
private int startTime = 10000;
public static final String FORMAT = "%02d:%02d";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textviewTimer1 = (TextView) findViewById(R.id.textViewTimer1);
    textviewTimer2 = (TextView) findViewById(R.id.textViewTimer2);

    textviewTimer1.setText("" + String.format(FORMAT, startTime/1000 / 60, ((startTime/1000) % 60)));
    textviewTimer2.setText("" + String.format(FORMAT, startTime/1000 / 60, ((startTime/1000) % 60)));

    casovac1 = new MyCountDownTimer(this, textviewTimer1, startTime, 200); //CHYBA TU (42. riadok)
    casovac2 = new MyCountDownTimer(this, textviewTimer2, startTime, 200);

}


Kód:
public class MyCountDownTimer extends CountDownTimer {

private Context context;

TextView textviewTimer;

public MyCountDownTimer(Context mContext, TextView textView, long startTime, long interval) {
    super(startTime, interval);
    context = mContext;
    textviewTimer = textView;
}

MediaPlayer mp3 = MediaPlayer.create(context, R.raw.three); //CHYBA TU (28. riadok)
MediaPlayer mp2 = MediaPlayer.create(context, R.raw.two);
MediaPlayer mp1 = MediaPlayer.create(context, R.raw.one);
MediaPlayer mpHorn = MediaPlayer.create(context, R.raw.airhorn);

...


a chybová hláška:
Kód:
07-08 22:17:08.259 22889-22889/? E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{com.martin.odpocitavaniepokus1/com.martin.odpocitavaniepokus1.MainActivity}: java.lang.NullPointerException
...
Caused by: java.lang.NullPointerException at android.media.MediaPlayer.create(MediaPlayer.java:677) at com.martin.odpocitavaniepokus1.MyCountDownTimer.(MyCountDownTimer.java:28) at com.martin.odpocitavaniepokus1.MainActivity.onCreate(MainActivity.java:42)


Offline

Užívateľ
Užívateľ
Android - MediaPlayer a Context

Registrovaný: 05.04.11
Príspevky: 1693
Témy: 50 | 50
Bydlisko: Žilina, Pop...
NapísalOffline : 09.07.2015 18:33 | Android - MediaPlayer a Context

Treba pouzivat Android dokumentaciu. http://developer.android.com/reference/android/content/Context.html Context je vlastne nieco co ti dovoluje pristup ku platformovo specifickym veciam, ako resources kde mas fonty, obrazky, stringy atd., ako ja spustanie novych aktivit a rozne ine veci. Keby si si precital dokumentaciu tak by si videl ze potomkom triedy Context je ContextWrapper a medzi jeho potomkami je aj Activity trieda.

Z toho je jasne ze Activita je vlastne sama sebou Context-om a preto v inej trieda, ktora nema napisane extends AppCompatActivity (ActionBarActivity je deprecated a nemal by si to pouzivat), teda nie je potomkom Contextu, tak sa tam ten Context nema ako objavit a musis ho posielat cez parametre konstruktora.

Tu sa dostavame k nejakym problemom a to ze Context moze zaniknut a mal by si pouzivat WeakReference<Context> http://docs.oracle.com/javase/7/docs/api/java/lang/ref/WeakReference.html

Dalej neviem co chces docielit podedenim CountDownTimer triedy ale posielat do triedy context, ktora by nic s contextom nemala mat spolocne je dost zly pristup. Ten error je nejaky divny skus si tam dat if podmienky nech to logne ci context, alebo textview je null a posli tu celu triedu :)


_________________
rMBP 13 2015
iPhone 7
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 01.03.13
Prihlásený: 25.04.26
Príspevky: 220
Témy: 49 | 49
Bydlisko: Sabinov
Napísal autor témyOffline : 09.07.2015 22:42 | Android - MediaPlayer a Context

no ten nápad s contextom som si vygooglil na stack overflow, ale zrejme to nebol presne môj prípad :) tu posielam obe triedy:
MainActivity.class
Kód:
public class MainActivity extends ActionBarActivity {

    public TextView textviewTimer1;
    private TextView textviewTimer2;
    private MyCountDownTimer casovac1;
    private MyCountDownTimer casovac2;
    private int startTime = 10000;
    public static final String FORMAT = "%02d:%02d";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textviewTimer1 = (TextView) findViewById(R.id.textViewTimer1);
        textviewTimer2 = (TextView) findViewById(R.id.textViewTimer2);

        textviewTimer1.setText("" + String.format(FORMAT, startTime/1000 / 60, ((startTime/1000) % 60)));
        textviewTimer2.setText("" + String.format(FORMAT, startTime/1000 / 60, ((startTime/1000) % 60)));

        casovac1 = new MyCountDownTimer(this, textviewTimer1, startTime, 200);
        casovac2 = new MyCountDownTimer(this, textviewTimer2, startTime, 200);

    }

    public void StartTimer1(View view) {
        casovac1.start();
    }

    public void StopTimer1(View view) {
        casovac1.cancel();
    }

    public void StartTimer2(View view) {
        casovac2.start();
    }

    public void StopTimer2(View view) {
        casovac2.cancel();
    }


}

MyCountDownTimer.class
Kód:
public class MyCountDownTimer extends CountDownTimer {

    boolean played1 = false;
    boolean played2 = false;
    boolean played3 = false;

    int sekundy;
    private Context context;

    TextView textviewTimer;

    public MyCountDownTimer(Context mContext, TextView textView, long startTime, long interval) {
        super(startTime, interval);
        context = mContext;
        textviewTimer = textView;
    }

    MediaPlayer mp3 = MediaPlayer.create(context, R.raw.three);
    MediaPlayer mp2 = MediaPlayer.create(context, R.raw.two);
    MediaPlayer mp1 = MediaPlayer.create(context, R.raw.one);
    MediaPlayer mpHorn = MediaPlayer.create(context, R.raw.airhorn);

    @Override
    public void onTick(long millisUntilFinished) {
        sekundy = (int) Math.ceil(millisUntilFinished / 1000.0);
        textviewTimer.setText("" + String.format(MainActivity.FORMAT, sekundy / 60, (sekundy % 60)));

        if (sekundy == 3 && played3 == false) {
            mp3.start();
            played3 = true;
        }
        if (sekundy == 2 && played2 == false) {
            mp2.start();
            played2 = true;
        }
        if (sekundy == 1 && played1 == false) {
            mp1.start();
            played1 = true;
        }
    }

    @Override
    public void onFinish() {
        textviewTimer.setText("00:00");
        mpHorn.start();
    }
}


Offline

Užívateľ
Užívateľ
Android - MediaPlayer a Context

Registrovaný: 05.04.11
Príspevky: 1693
Témy: 50 | 50
Bydlisko: Žilina, Pop...
NapísalOffline : 13.07.2015 0:18 | Android - MediaPlayer a Context

A tebe sa to vobec neda spustit, alebo to padne az po stlaceni tlacidla ? Kazdopadne skopiruj cely log a daj ho tu ako spoiler.
Este ma napadlo, vsade kde volas
Kód:
mpX.start();
skus najprv zavolat
Kód:
if(mpX != null) mpX.start();
Inak ti to pada na nejakom divnom riadku. Aky mas typ zvukov ?
Inak nedefinuj onclick metody v xml atributoch, pouzivaj anonymne bloky, alebo skus nieco taketo http://jakewharton.github.io/butterknife/


_________________
rMBP 13 2015
iPhone 7
 [ Príspevkov: 4 ] 


Android - MediaPlayer a Context



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

P: mediaplayer , dvd player

v Bazár

8

824

21.03.2011 9:06

fatboy.zelo

V tomto fóre nie sú ďalšie neprečítané témy.

context.exe

v Ostatné programy

1

865

26.08.2021 14:28

shiro

V tomto fóre nie sú ďalšie neprečítané témy.

Java - na co je context?

v Backend

7

625

30.04.2014 10:15

XOLOO

V tomto fóre nie sú ďalšie neprečítané témy.

Fatal error: Using $this when not in object context

v Backend

6

569

26.04.2010 16:40

petanorech

V tomto fóre nie sú ďalšie neprečítané témy.

Android tv box S905x 2GB/16GB Android 7.1.2 za výhodnú cenu

v Kôš

0

94

18.08.2017 9:27

Smith Wesson

V tomto fóre nie sú ďalšie neprečítané témy.

Android to Android migracia

v Ostatné programy

4

1468

16.07.2019 16:14

tatko Tom

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.

Android

v Ostatné

2

840

19.06.2011 20:54

Bajzik

V tomto fóre nie sú ďalšie neprečítané témy.

Android

v Mobilné aplikácie

2

674

28.03.2013 8:32

Echo

V tomto fóre nie sú ďalšie neprečítané témy.

Android

v Prenosné zariadenia

7

841

18.11.2010 14:56

Spartan.Ex

V tomto fóre nie sú ďalšie neprečítané témy.

Fotenie android

v Ostatné programy

16

747

02.05.2020 8:17

tatko Tom

V tomto fóre nie sú ďalšie neprečítané témy.

Android aplikacie

v Hry a herné konzoly

1

525

24.04.2015 13:43

lacko4444122

V tomto fóre nie sú ďalšie neprečítané témy.

Android - Launchery

v Smartfóny a tablety

3

447

24.08.2015 21:10

Yacko

V tomto fóre nie sú ďalšie neprečítané témy.

Symbian - Android

v Smartfóny a tablety

3

2182

15.08.2010 18:46

Nanosonda

V tomto fóre nie sú ďalšie neprečítané témy.

Android tablet

v Prenosné zariadenia

1

497

22.11.2015 0:22

liqua1

V tomto fóre nie sú ďalšie neprečítané témy.

Android APP

v Mobilné aplikácie

2

1857

14.05.2022 14:09

Smith Wesson

V tomto fóre nie sú ďalšie neprečítané témy.

android lenovo

v Prenosné zariadenia

16

780

28.01.2014 19:49

Smith Wesson



© 2005 - 2026 PCforum, edited by JanoF