从通知开始的NullPointerException

时间:2011-02-26 06:27:08

标签: android nullpointerexception notifications

我制作了一个媒体播放器。现在,我想在我的通知区域中放置一个XML文件。为此,我遵循了这个流程,但在开始通知时我得到了NullPointerException

1. 在Android清单文件中添加服务

service class=".MDService"
android:process=":remote"
android:name=".MDService"

2。按如下方式创建MDSInterface.aidl

interface MDSInterface {        
    void start();
    void stop(); 
}

3。为远程视图创建了一个MDService类,并在其中添加了一个XML文件并添加了一个通知区域。以下是代码

package org.streamingmusic.main;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent; 
import android.os.DeadObjectException; 
import android.os.IBinder; 
import android.os.RemoteException; 
import android.widget.RemoteViews;

public class MDService extends Service
{

    public static NotificationManager nm;   
    private static final int  NOTIFY_ID = 1;


    @Override
    public void onCreate() {
        super.onCreate();
        nm =(NotificationManager)
        getSystemService(NOTIFICATION_SERVICE);
    }

    @Override
    public void onDestroy() {
        nm.cancel(NOTIFY_ID);
    }

    /**
    * Set notification on play song
    * @param Trackname
    * @param  Artistname
    */
    public void startnot() {
        Notification notification = new Notification(R.drawable.icon, "SMS", 0);
        RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.mindback);

        notification.contentView = contentView;
        notification.flags |= Notification.FLAG_NO_CLEAR;
        notification.flags |= Notification.FLAG_ONGOING_EVENT;

        Intent intent = new Intent(getApplicationContext(), StreamingPlayer.class);
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);

        notification.contentIntent=contentIntent;
        nm.notify(NOTIFY_ID, notification);
    }

    public IBinder getBinder() {
        return mBinder;
    }

    public final MDSInterface.Stub mBinder = new MDSInterface.Stub() {
        public void stop() throws RemoteException {
            // TODO Auto-generated method stub
            nm.cancel(NOTIFY_ID);
        }

        public void start() throws RemoteException {
            // TODO Auto-generated method stub
            startnot();
        }
    };

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return mBinder;
    }
}

4. 在玩家活动中声明MDService类的对象

public static MDSInterface mpInterface;

5. 绑定服务

getApplicationContext().bindService(new Intent(
                getApplicationContext(), MDService.class),
                mConnection, Context.BIND_AUTO_CREATE);

6. 添加服务连接方法

public static ServiceConnection mConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName name, IBinder service) {
        mpInterface = MDSInterface.Stub.asInterface((IBinder)service);
    }

    public void onServiceDisconnected(ComponentName name) {
        mpInterface = null;
    }
};

拜托,谁能告诉我我错过了什么?

实际上,我的目标是在通知区域中提供功能,以便用户可以播放下一首或上一首歌曲,暂停歌曲,还可以转到应用程序。 这意味着在通知区域中添加四个按钮。如果有人有更好的方法,请分享。我很感激。

感谢。

1 个答案:

答案 0 :(得分:2)

无可否认,在没有费心阅读代码的情况下,这种情况通常是由于尝试调用前一次调用返回的null对象的方法而产生的。

故事的道德总是在调用方法之前检查返回的对象是否为空!

如果它们为null,则需要通过对象检索调用找出并解决错误。