【问题标题】:Trying to start a service on android and get a null object尝试在android上启动服务并获取空对象
【发布时间】:2016-04-14 12:52:21
【问题描述】:

我正在为android创建一个后台服务,所以我打电话:

startService(new Intent(this, RasPiDomBackground.class));

服务代码:

public class RasPiDomBackground extends Service {

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

@Override
public void onCreate() {
    Toast.makeText(this, "Service created!", Toast.LENGTH_LONG).show();
}

@Override
public void onDestroy() {
    Toast.makeText(this, "Service stopped", Toast.LENGTH_LONG).show();
}

@Override
public void onStart(Intent intent, int startid) {
    Toast.makeText(this, "Service started by user.", Toast.LENGTH_LONG).show();
}
}

我收到一个对我来说毫无意义的错误.....

1928-1928/nl.digicre8.raspidom W/System.err﹕ java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
03-23 16:20:22.902    1928-1928/nl.digicre8.raspidom W/System.err﹕ at android.content.ContextWrapper.getPackageName(ContextWrapper.java:131)
03-23 16:20:22.902    1928-1928/nl.digicre8.raspidom W/System.err﹕ at android.content.ComponentName.<init>(ComponentName.java:77)
03-23 16:20:22.902    1928-1928/nl.digicre8.raspidom W/System.err﹕ at android.content.Intent.<init>(Intent.java:3996)
03-23 16:20:22.902    1928-1928/nl.digicre8.raspidom W/System.err﹕ at nl.digicre8.raspidom.RasPiDomAPI.CallAction(RasPiDomAPI.java:149)
03-23 16:20:22.905    1928-1928/nl.digicre8.raspidom W/System.err﹕ at nl.digicre8.raspidom.MainActivity.LocationService(MainActivity.java:208)
03-23 16:20:22.907    1928-1928/nl.digicre8.raspidom W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
03-23 16:20:22.907    1928-1928/nl.digicre8.raspidom W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
03-23 16:20:22.907    1928-1928/nl.digicre8.raspidom W/System.err﹕ at android.view.View$1.onClick(View.java:4002)
03-23 16:20:22.907    1928-1928/nl.digicre8.raspidom W/System.err﹕ at android.view.View.performClick(View.java:4756)
03-23 16:20:22.907    1928-1928/nl.digicre8.raspidom W/System.err﹕ at android.view.View$PerformClick.run(View.java:19749)
03-23 16:20:22.907    1928-1928/nl.digicre8.raspidom W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:739)
03-23 16:20:22.907    1928-1928/nl.digicre8.raspidom W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
03-23 16:20:22.909    1928-1928/nl.digicre8.raspidom W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
03-23 16:20:22.909    1928-1928/nl.digicre8.raspidom W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5221)
03-23 16:20:22.909    1928-1928/nl.digicre8.raspidom W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
03-23 16:20:22.909    1928-1928/nl.digicre8.raspidom W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
03-23 16:20:22.909    1928-1928/nl.digicre8.raspidom W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
03-23 16:20:22.909    1928-1928/nl.digicre8.raspidom W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
03-23 16:20:22.969    1928-1977/nl.digicre8.raspidom W/EGL_emulation﹕ eglSurfaceAttrib not implemented
03-23 16:20:22.969    1928-1977/nl.digicre8.raspidom W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa5984f20, error=EGL_SUCCESS

以前有人遇到过这个问题吗? onStart 似乎也被贬低了,有替代方法吗?

【问题讨论】:

  • 使用onStartCommand() 而不是onStart(Intent intent, int startid)onStartCommand() 在另一个组件(活动,...)启动服务时调用。
  • 改变了 onStart 但 sill 给出了同样的错误

标签: android service


【解决方案1】:

在你的Activity类

startService(new Intent(getBaseContext(), RasPiDomBackground.class));

在您的服务类

    public class RasPiDomBackground extends Service {

    /* (non-Javadoc)
     * @see android.app.Service#onBind(android.content.Intent)
     */
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
         // Let it continue running until it is stopped.
         Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
         return START_STICKY;
     }

     @Override
     public void onDestroy() {
         super.onDestroy();
         Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
     }
}

【讨论】:

  • 刚刚尝试从我的 mainactivity 访问它,但它在我通过 getapplicationcontext(); 的较低类中这对 getbasecontext 有影响吗?
  • 不,只返回当前运行的活动和 getApplicationContext() 无关紧要 - 返回应用程序中运行的所有活动的上下文..
  • 03-23 17:25:13.600 2365-2365/nl.digicre8.raspidom W/System.err: java.lang.NullPointerException: 尝试调用虚拟方法 'android.content.ComponentName android.空对象引用上的 content.Context.startService(android.content.Intent)' 是我得到的错误
猜你喜欢
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多