Autore Topic: Errore Lancio Service da bottone  (Letto 440 volte)

Offline antoniosavolare

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    LG 4x HD
  • Sistema operativo:
    Ubuntu 11.04
Errore Lancio Service da bottone
« il: 23 Settembre 2013, 13:22:20 CEST »
0
Buongiorno a tutti, ho un problema che non riesco a lanciare un service cliccando un bottone nella MainActivity. Mi da una nullPointException ma non riesco a capire il perchè..... ecco il vari file:
Questa è la mainActivity:
Codice (Java): [Seleziona]
[..] //all'interno dell'OnCreate

salva.setOnClickListener(new View.OnClickListener() {
          public void onClick(View view) {
[..]

lanciaServizio ();
}

public void lanciaServizio(){

 Intent principale =  new Intent(this, ServicePrincipale.class);
 startService(principale);

}

E questo è il manifest

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example"
   android:versionCode="1"
   android:versionName="1.0" >

    <uses-sdk
       android:minSdkVersion="8"
       android:targetSdkVersion="18" />

   
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
     
    <application
       android:allowBackup="true"
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >
        <activity
           android:name="com.example.MainActivity"
           android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
       
       
        <service android:name=".ServicePrincipale"
                 android:enabled="true" />
        <service android:name=".ServizioRevisione"
                 android:enabled="true" />
        <service android:name=".ServizioGiro"
                 android:enabled="true" />
        <service android:name=".ServizioPressione"
                 android:enabled="true" />
       
       
       
       
         <receiver
        android:name=".MyReceiver"
        android:enabled="true"
        android:exported="false" >
         <intent-filter>
                 <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
                </receiver>
       
       
    </application>

</manifest>
Questo è il logcat:
Codice: [Seleziona]
09-23 13:17:35.366: E/AndroidRuntime(31405): FATAL EXCEPTION: main
09-23 13:17:35.366: E/AndroidRuntime(31405): java.lang.RuntimeException: Unable to start service com.example.ServicePrincipale@42368db8 with Intent { cmp=com.example/.ServicePrincipale }: java.lang.NullPointerException
09-23 13:17:35.366: E/AndroidRuntime(31405):         at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2540)
09-23 13:17:35.366: E/AndroidRuntime(31405):         at android.app.ActivityThread.access$1900(ActivityThread.java:138)
09-23 13:17:35.366: E/AndroidRuntime(31405):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1301)
09-23 13:17:35.366: E/AndroidRuntime(31405):         at android.os.Handler.dispatchMessage(Handler.java:99)
09-23 13:17:35.366: E/AndroidRuntime(31405):         at android.os.Looper.loop(Looper.java:137)
09-23 13:17:35.366: E/AndroidRuntime(31405):         at android.app.ActivityThread.main(ActivityThread.java:4872)
09-23 13:17:35.366: E/AndroidRuntime(31405):         at java.lang.reflect.Method.invokeNative(Native Method)
09-23 13:17:35.366: E/AndroidRuntime(31405):         at java.lang.reflect.Method.invoke(Method.java:511)
09-23 13:17:35.366: E/AndroidRuntime(31405):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
09-23 13:17:35.366: E/AndroidRuntime(31405):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
09-23 13:17:35.366: E/AndroidRuntime(31405):         at dalvik.system.NativeStart.main(Native Method)
09-23 13:17:35.366: E/AndroidRuntime(31405): Caused by: java.lang.NullPointerException
09-23 13:17:35.366: E/AndroidRuntime(31405):         at com.example.ServicePrincipale.onStart(ServicePrincipale.java:74)
09-23 13:17:35.366: E/AndroidRuntime(31405):         at android.app.Service.onStartCommand(Service.java:450)
09-23 13:17:35.366: E/AndroidRuntime(31405):         at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2523)
09-23 13:17:35.366: E/AndroidRuntime(31405):         ... 10 more

Ringrazio anticipatamente chi mi potrà essere d'aiuto.
P.S. Altra domanda che non c'entra: come si fa a confrontare due oggetti Drawable?
es. imagebutton.getBackground() == ic_launcher, perchè a me occorrerebbe che al click del bottone se lo sfondo è l'immagine che dico io avviene un evento
« Ultima modifica: 23 Settembre 2013, 14:12:58 CEST da antoniosavolare »

Offline maku85

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +35
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia J
  • Play Store ID:
    MaKu
  • Sistema operativo:
    Windows 8.1
Re:Errore Lancio Service da bottone
« Risposta #1 il: 23 Settembre 2013, 14:22:39 CEST »
+1
Dal Log sembra che l'errore è alla riga 74 della classe ServicePrincipale.java dovresti controllare cosa c'è.

Per l'altra domanda prova con questo:

Codice (Java): [Seleziona]
imagebutton.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.immageine_da_confrontare).getConstantState())
- Il programmatore è colui che risolve in un modo incomprensibile un problema che non sapevi di avere -

Offline antoniosavolare

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    LG 4x HD
  • Sistema operativo:
    Ubuntu 11.04
Re:Errore Lancio Service da bottone
« Risposta #2 il: 23 Settembre 2013, 15:00:50 CEST »
0
Posto direttamente il ServicePrincipale perchè non riesco lo stesso a capire, anche se sembra un problema di AlarmManager:

Codice (Java): [Seleziona]
package com.example;


import java.util.Calendar;
import java.util.Date;

import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.IBinder;
                           

public class ServicePrincipale extends Service


{
        AlarmManager alarmrev;
        AlarmManager alarmpres;
        AlarmManager alarmgiro;
       
    private PendingIntent pendingrev;
    private PendingIntent pendinggiro;
    private PendingIntent pendingpres;
   
   
     @Override
     public IBinder onBind(Intent arg0)
     {
       // TODO Auto-generated method stub
        return null;
     }

    @Override
    public void onCreate()
    {
       // TODO Auto-generated method stub  
       super.onCreate();
    }

   @SuppressWarnings("static-access")
   @Override
   public void onStart(Intent intent, int startId)
   {
       super.onStart(intent, startId);

       //ottengo shared preferences
                  SharedPreferences prefs = getSharedPreferences("Preferenze", Context.MODE_PRIVATE);
                  int annorevsh = prefs.getInt("annorevsh", 2013);
                  int meserevsh = prefs.getInt("mese rev sh", 5);
                  int mesepressh = prefs.getInt("mese pres sh", 4);
                  int giornidaaggiungere = prefs.getInt("giorni da aggiungere sh", 1000);
                 
                  // creo anno pres
                  Date odierna = new Date (System.currentTimeMillis());
                  int annopres = odierna.getYear();
                 
                  //creo tutti i calendar che mi servono
                  Calendar calendarrev = Calendar.getInstance();
                  Calendar calendargiro = Calendar.getInstance();
                  Calendar calendarpres = Calendar.getInstance();
                  calendarrev.set(annorevsh, meserevsh, 21, 9, 37);
                  calendarpres.set(annopres, mesepressh, 21, 9, 41);
                  calendargiro.setTime(odierna);
                  calendargiro.add(Calendar.DATE, giornidaaggiungere);
                 
                  //creo tutti gli alarm manager
                  Intent revintent = new Intent(ServicePrincipale.this, ServizioRevisione.class);
          pendingrev = PendingIntent.getService(ServicePrincipale.this, 0, revintent, PendingIntent.FLAG_CANCEL_CURRENT);


          //questa sotto è la riga 74
          alarmrev.set(AlarmManager.RTC_WAKEUP, calendarrev.getTimeInMillis(), pendingrev);
         
          Intent presintent = new Intent(ServicePrincipale.this, ServizioPressione.class);
          pendingpres = PendingIntent.getService(ServicePrincipale.this, 0, presintent, PendingIntent.FLAG_CANCEL_CURRENT);
          alarmpres.set(AlarmManager.RTC_WAKEUP, calendarpres.getTimeInMillis(), pendingpres);
                 
          Intent girointent = new Intent(ServicePrincipale.this, ServizioGiro.class);
          pendinggiro = PendingIntent.getService(ServicePrincipale.this, 0, girointent, PendingIntent.FLAG_CANCEL_CURRENT);
          alarmgiro.set(AlarmManager.RTC_WAKEUP, calendargiro.getTimeInMillis(), pendinggiro);
                 

     
    }

    @Override
    public void onDestroy()
    {
        // TODO Auto-generated method stub
        super.onDestroy();
    }

per l'altra domanda stasera provo ma così a occhio sembra fuoznionare perchè avevo provato qualcosa del genere ma sembrava incompleto ;)
« Ultima modifica: 23 Settembre 2013, 15:03:36 CEST da antoniosavolare »

Offline Giak

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    transformer tf101
  • Sistema operativo:
    ubuntu 12.10
Re:Errore Lancio Service da bottone
« Risposta #3 il: 23 Settembre 2013, 15:25:46 CEST »
0
ma scusa "alarmrev" dove lo inizializzi? se non lo inizializzi è ovvio che è null
« Ultima modifica: 23 Settembre 2013, 15:27:59 CEST da Giak »

Offline maku85

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +35
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia J
  • Play Store ID:
    MaKu
  • Sistema operativo:
    Windows 8.1
Re:Errore Lancio Service da bottone
« Risposta #4 il: 23 Settembre 2013, 15:34:09 CEST »
+1
Si manca l'inizializzazione di alarmrev

Codice (Java): [Seleziona]
AlarmManager alarmrev= (AlarmManager) getSystemService(Context.ALARM_SERVICE);
- Il programmatore è colui che risolve in un modo incomprensibile un problema che non sapevi di avere -

Offline antoniosavolare

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    LG 4x HD
  • Sistema operativo:
    Ubuntu 11.04
Re:Errore Lancio Service da bottone
« Risposta #5 il: 23 Settembre 2013, 15:57:25 CEST »
0
L'ho inizializzato ma l'ho fatto in modo sbagliato  :-[. Grazie mille ragazzi stasera testo e metto topic risolto  ;-)