Autore Topic: Service con timer e notifica  (Letto 755 volte)

Offline Pacobillo

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus one
  • Sistema operativo:
    Windows 7
Service con timer e notifica
« il: 19 Novembre 2013, 14:58:32 CET »
0
Ciao a tutti!
Sto provando a creare un service che viene richiamato tramite un timer e, in caso vi siano le condizioni, fa partire una notifica.
Il codice è questo:

Codice (Java): [Seleziona]
package app.tdgpisa.service;

import java.util.Timer;
import java.util.TimerTask;

import org.json.JSONArray;
import org.json.JSONException;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import app.tdgpisa.Bacheca;
import app.tdgpisa.R;
import app.tdgpisa.db.Database;

public class NotificaBacheca extends Service {
        private Timer miotimer = new Timer();
        private static  long intervallo = 10*1000;
        private long msg =0;
        Database database=new Database();
        private static final int SIMPLE_NOTIFICATION_ID = 1;
        NotificationManager mNotificationManager;

        public IBinder onBind(Intent intent) {
                return null;
        }

        @Override
        public void onCreate() {

                Log.d("notifica", " inizio create");
                String messaggi = database.MessaggiNum();

                try {
                        JSONArray jsonArray = new JSONArray(messaggi);
                        for (int i = 0; i < jsonArray.length(); i++)
                        {
                                msg = jsonArray.getJSONObject(i).getInt("NUM");
                                Log.d("notifica", "numero msg nel create: "+ msg);
                        }
                       
                } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

        }

        @Override
        public void onDestroy() {

        }

        @Override
        public void onStart(Intent intent, int startid) {
                StartServUpdateTask();
        }    

        private void StartServUpdateTask() {
                miotimer.scheduleAtFixedRate(new TimerTask() {
                        @Override
                        public void run() {
                                Log.d("notifica", "parte il run");
                                String messaggi = database.MessaggiNum();
                                JSONArray jsonArray;
                                try {
                                        jsonArray = new JSONArray(messaggi);
                                        long newmsg = jsonArray.getJSONObject(0).getLong("NUM");
                                        Log.d("notifica", "numero msg nel run: "+ newmsg);
                                        if (newmsg>msg){
                                                msg=newmsg;
                                                Log.d("notifica", "sono diversi, parte la notifica");
                                                Notifica();
                                        }
                                } catch (JSONException e) {

                                }

                        }
                }, 0, intervallo);
        }
        private void Notifica() {

                NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(NotificaBacheca.this);

                notificationBuilder.setContentTitle("TITOLO");
                notificationBuilder.setContentText("TESTO");
                notificationBuilder.setTicker("SCROLL TESTO");
                notificationBuilder.setWhen(System.currentTimeMillis());
                notificationBuilder.setSmallIcon(R.drawable.ic_launcher);
                notificationBuilder.setAutoCancel(true);

                Intent notificationIntent = new Intent(NotificaBacheca.this, Bacheca.class);
                PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
                notificationBuilder.setContentIntent(contentIntent);

                notificationBuilder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
               
                mNotificationManager.notify(SIMPLE_NOTIFICATION_ID,     notificationBuilder.build());
        }


}

Ma l'ultima istruzione crea un errore.
L'errore è questo:

Codice: [Seleziona]
11-19 13:51:56.752: E/AndroidRuntime(343): FATAL EXCEPTION: Timer-0
11-19 13:51:56.752: E/AndroidRuntime(343): java.lang.NullPointerException
11-19 13:51:56.752: E/AndroidRuntime(343):         at app.tdgpisa.service.NotificaBacheca.Notifica(NotificaBacheca.java:104)
11-19 13:51:56.752: E/AndroidRuntime(343):         at app.tdgpisa.service.NotificaBacheca.access$2(NotificaBacheca.java:87)
11-19 13:51:56.752: E/AndroidRuntime(343):         at app.tdgpisa.service.NotificaBacheca$1.run(NotificaBacheca.java:78)
11-19 13:51:56.752: E/AndroidRuntime(343):         at java.util.Timer$TimerImpl.run(Timer.java:284)

Qualcuno può aiutarmi a capire dov'è il mio errore?
Scusate fin da ora le eventuali corbellerie.. :)
GRAZIE


Post unito: 19 Novembre 2013, 17:23:40 CET
Scusate, era di una banalità unica...mi ero dimenticato di inizializzare mNotificationManager...sono un fesso! :)
Scusate ancora, ma gli occhi non volevano vederlo...
« Ultima modifica: 19 Novembre 2013, 17:23:40 CET da Pacobillo, Reason: Merged DoublePost »