Problemi su un progetto Android che non riesco a risolvere in nessun modo

U

Utente 399201

Ospite
Buongiorno,
Entro lunedì prossimo devo consegnare al corso che sto facendo un progetto fatto su Android Studio, il problema è che sono presenti due errori che non riesco a capire da cosa son dovuti ed essendo questo il progetto di fine corso mi girerebbe consegnare un progetto con errori.
Qualcuno che se ne intende più di me riuscirebbe a darmi una mano?

1° Errore
il primo "errore" avviene quando chiudo l'app. insieme a questa è presente una notifica, che fa da player per la musica, che non riesco a togliere (e continua a riprodurmi la canzone in sottofondo). Questa è la "soluzione" che avevo provato a fare

MainActivity
Java:
    @Override
    protected void onDestroy() {
        super.onDestroy();
        MusicService musicService = new MusicService();
        musicService.cancelAllNotification(getApplicationContext());
    }

Nella classe MusicService
Java:
void showNotification(int playPauseBtn){
    // if you will go through the notification series playlist having
    //5 videos you will get more knowledge about what i am doing here
    Intent intent = new Intent(this, PlayerActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this,0,intent,0);
    Intent prevIntent = new Intent(this, NotificationReceiver.class).setAction(ACTION_PREVIOUS);
    PendingIntent prevPending = PendingIntent.getBroadcast(this,0,prevIntent,PendingIntent.FLAG_UPDATE_CURRENT);
    Intent pauseIntent = new Intent(this, NotificationReceiver.class).setAction(ACTION_PLAY);
    PendingIntent pausePending = PendingIntent.getBroadcast(this,0,pauseIntent,PendingIntent.FLAG_UPDATE_CURRENT);
    Intent nextIntent = new Intent(this, NotificationReceiver.class).setAction(ACTION_NEXT);
    PendingIntent nextPending = PendingIntent.getBroadcast(this,0,nextIntent,PendingIntent.FLAG_UPDATE_CURRENT);
    byte[] picture = null;
    picture = getAlbumArt(musicFiles.get(position).getPath());
    Bitmap thumb = null;
    if (picture != null) {
        thumb = BitmapFactory.decodeByteArray(picture,0,picture.length);
    } else {
        thumb = BitmapFactory.decodeResource(getResources(),R.drawable.default_image);
    }
    notification = new NotificationCompat.Builder(this, CHANNEL_ID_2).setSmallIcon(playPauseBtn)
            .setLargeIcon(thumb)
            .setContentTitle(musicFiles.get(position).getTitle())
            .setContentText(musicFiles.get(position).getArtist())
            .addAction(R.drawable.ic_skip_previous,"Previous",prevPending)
            .addAction(playPauseBtn,"Pause",pausePending)
            .addAction(R.drawable.ic_skip_next,"Next",nextPending)
            .setStyle(new androidx.media.app.NotificationCompat.MediaStyle().setMediaSession(mediaSessionCompat.getSessionToken()))
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setOnlyAlertOnce(true)
            .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
            .build();
    startForeground(2, notification);
}

public void cancelAllNotification(Context ctx){
    NotificationManager nMgr = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
    if (nMgr != null) {
        nMgr.cancelAll();
    }
}

2° Errore
Il secondo errore, invece, avviene quando premo il pulsante play del player interno mi da errore
Java:
playPauseBtn.setOnClickListener(v -> {
    if (musicService != null){
      musicService.playPauseBtnClicked();
      if (musicService != null && musicService.isPlaying()){
         playPauseBtn.setImageResource(R.drawable.ic_pause);
      }else if (musicService != null){
         playPauseBtn.setImageResource(R.drawable.ic_play);
      }
     }
    });

l'Errore che mi da
Codice:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.media.MediaPlayer.isPlaying()' on a null object reference
    at com.example.musix.MusicService.isPlaying(MusicService.java:105)
    at com.example.musix.NowPlayingFragmentBottom.lambda$onCreateView$1$com-example-musix-NowPlayingFragmentBottom(NowPlayingFragmentBottom.java:94)
    at com.example.musix.NowPlayingFragmentBottom$$ExternalSyntheticLambda1.onClick(Unknown Source:2)

Grazie mille e scusate per i continui disturbi
 

ilfe98

Moderatore
Staff Forum
Utente Èlite
3,052
1,278
CPU
Intel i7 7700K
Dissipatore
Bequiet Dark rock pro 4
Scheda Madre
Msi pc mate z270
HDD
Seagate barracuda 1tb, silicon power NVME 500gb
RAM
Patriot viper steel 3733Mhz
GPU
Inno 3d gtx 1080 herculez design
Monitor
Asus mg279q
PSU
Corsair HX750
Case
Itek lunar 23
Net
Tiscali ftth
OS
windows 10,mint,debian,Arch linux
if (musicService != null && musicService.isPlaying())
Hai creato l'istanza dell'oggetto prima di chiamare il metodo?+
Per il primo errore purtroppo non riesco ad aiutarti perché ho fatto raramente progetti android quindi ne so ben poco
 
  • Mi piace
Reazioni: BigIssue
U

Utente 399201

Ospite
Il progetto è stato consegnato, però faccio lo stesso che pubblicare qua una "soluzione" che ho trovato, il modo che possa magari essere utile per qualcuno in futuro...

All'interno del MainActivity ho richiamato il metodo onDestroy, dove, dopo aver creato un oggetto MusicService, ho richiamato una funzione di questa Classe, cancelAllNotification, passandogli come parametro Context

Java:
@Override
    protected void onDestroy() {
        super.onDestroy();
        MusicService musicService = new MusicService();
        musicService.cancelAllNotification(this);
    }

Nella Classe MusicService, invece, tramite un NotificationManager, cancello le notifiche

Java:
public void cancelAllNotification(Context ctx){
        NotificationManager nMgr = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
        assert nMgr != null;
        nMgr.cancelAll();
    }


Per il secondo problema, invece, non sono riuscito a trovare una soluzione (dovuto anche al fatto che a causa problemi personali sono dovuto stare fuori casa per 3 giorni e non sono riuscito a portarmi dietro il computer), però, essendo che il problema me lo dava solo con una determinata condizione, ho deciso di lasciarlo così e di consegnarlo lo stesso.

Hai creato l'istanza dell'oggetto prima di chiamare il metodo?+
Per il primo errore purtroppo non riesco ad aiutarti perché ho fatto raramente progetti android quindi ne so ben poco

Infine voglio chiedere scusa a ilfe98 se non prima di oggi non ho scritto risposto o continuato la discussione ma a causa del problema prima citato sono arrivato alla consegna in fretta e furia e non mi ero accorto che mi era arrivata una notifica dal forum.
 

Ibernato

Utente Èlite
4,330
2,047
OS
Windows 10 Pro / Ubuntu 22.04
Il progetto è stato consegnato, però faccio lo stesso che pubblicare qua una "soluzione" che ho trovato, il modo che possa magari essere utile per qualcuno in futuro...

All'interno del MainActivity ho richiamato il metodo onDestroy, dove, dopo aver creato un oggetto MusicService, ho richiamato una funzione di questa Classe, cancelAllNotification, passandogli come parametro Context

Java:
@Override
    protected void onDestroy() {
        super.onDestroy();
        MusicService musicService = new MusicService();
        musicService.cancelAllNotification(this);
    }

Nella Classe MusicService, invece, tramite un NotificationManager, cancello le notifiche

Java:
public void cancelAllNotification(Context ctx){
        NotificationManager nMgr = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
        assert nMgr != null;
        nMgr.cancelAll();
    }


Per il secondo problema, invece, non sono riuscito a trovare una soluzione (dovuto anche al fatto che a causa problemi personali sono dovuto stare fuori casa per 3 giorni e non sono riuscito a portarmi dietro il computer), però, essendo che il problema me lo dava solo con una determinata condizione, ho deciso di lasciarlo così e di consegnarlo lo stesso.



Infine voglio chiedere scusa a ilfe98 se non prima di oggi non ho scritto risposto o continuato la discussione ma a causa del problema prima citato sono arrivato alla consegna in fretta e furia e non mi ero accorto che mi era arrivata una notifica dal forum.
Ti consiglio di usare Kotlin che risolve molti dei problemi dovuti al null pointer di Java :) https://kotlinlang.org/docs/null-safety.html
Oramai Kotlin è il futuro di Android.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!