startService上的空指针异常

时间:2014-02-06 23:23:38

标签: android android-intent android-service

我正在尝试从内部启动服务,因此它不会在unbind上停止。当我使用.class方法时,它不起作用。当我使用全名它工作正常。如果我从活动中进行呼叫,情况似乎也是如此。我无法弄清楚发生了什么!

@Override
public void onCreate()
{
super.onCreate();

// Null Pointer Exception
Intent serviceIntent = new Intent(getApplicationContext(), MyService.class);
startService(serviceIntent);

// Null Pointer Exception
Intent serviceIntent = new Intent(this, MyService.class);
startService(serviceIntent);

// Works!
Intent serviceIntent = new Intent("com.mypackage.MyService");
startService(serviceIntent);

一些清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mypackage"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="17" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" android:name="MyApplication">

    <service android:name="MyService" android:enabled="true"></service>

此外,确切的错误是:

  

java.lang.RuntimeException:无法使用Intent {cmp = com.mypackage / .MyService}启动服务com.mypackage @ 427d2b80:java.lang.NullPointerException

1 个答案:

答案 0 :(得分:0)

事实证明你需要将完整的类放入清单中,或者至少以“。”开头。 (来自文档)。我正在使用Eclipse来设置清单,它似乎没有问题找出它是哪个类,所以我没有看到问题。我之前从未遇到过这个问题。事实证明

Intent serviceIntent = new Intent("com.mypackage.MyService");
startService(serviceIntent);

实际上什么也没做。清单中所需的行是:

<service android:name="com.mypackage.MyService">

然后使用:

Intent serviceIntent = new Intent(this, MyService.class);
startService(serviceIntent);