新Intent中的NullPointerException

用户名

我正在尝试从发送消息,但Service收到错误消息

com.spynetstation.MediaService.notif(MediaService.java:162)出错

指向Service

Intent notificationIntent = new Intent(ctx, MediaService.class);

服务:

public class MediaService extends Service implements OnPreparedListener,OnCompletionListener{

    static MediaPlayer mediaPlayer;
    static NotificationManager nm;
    private static NotificationCompat.Builder mBuilder;
    static Context ctx;

    static String dataPlaying = null;
    static String soursetrack = null;
    static TimerTask repeatTask;
    static Timer t;
    Node node;
    static String filePath;
    static File file;
    String titleNotif = "Station";
    String contentNotif = "Running";

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

    public static void initMP(String urlStream){
        try {
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setDataSource(urlStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        mediaPlayer.prepareAsync();
        Log.d("MediaService", "prepareAsync");
    }

    public static void startMP(){
        mediaPlayer.setOnPreparedListener(new OnPreparedListener() {  
            @Override  
            public void onPrepared(MediaPlayer mp) {
                mp.start();
                Log.d("MediaService", "start");
                MainActivity.visible();
                if (MainActivity.track) {} else {doRepeatTask();}
            }
        });   
    }

    public static void stopMP() {
        if (mediaPlayer != null) {
            try {
                mediaPlayer.stop(); 
                Log.d("MediaService", "stop");
                if (MainActivity.track) {} else {stopRepeatTask();}
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void releaseMP() {
        if (mediaPlayer != null) {
            try {
                mediaPlayer.release();
                Log.d("MediaService", "release"); 
                mediaPlayer = null;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void onCompletion(MediaPlayer mp) {
        Log.d("MediaService", "onCompletion"); 
    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        Log.d("MediaService", "onPrepareed");
    }

    public void onCreate()  {
        super.onCreate();
        // tried the following ctx=getBaseContext(); did not help
        ctx = getApplicationContext();
        this.nm = ((NotificationManager)getSystemService("notification"));
    }

    public void onDestroy()  {
        this.nm.cancelAll();
        stopForeground(true);
    }

    public int onStartCommand(Intent paramIntent, int paramInt1, int paramInt2)  {
        try {
            TimeUnit.SECONDS.sleep(0);
            notif(titleNotif, contentNotif);
            return super.onStartCommand(paramIntent, paramInt1, paramInt2);
        } catch (InterruptedException localInterruptedException) {
            for (;;) {
                localInterruptedException.printStackTrace();
            }
        }
    }

    public static void notif(String titleNotif, String contentNotif){
        //building the notification
        mBuilder = new NotificationCompat.Builder(ctx)
            .setSmallIcon(R.drawable.spy)
            .setContentTitle(titleNotif)
            .setTicker(contentNotif);

        Intent notificationIntent = new Intent(ctx, MediaService.class);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 0, 
            notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        mBuilder.setContentIntent(pendingIntent);
        Notification n = mBuilder.build();
        nm.notify(1, n);
        // startForeground(12345, mBuilder.build());
    }

    public static void doRepeatTask(){
        t = new Timer();
        repeatTask = new TimerTask() {
            public void run() {
                new Task().execute();
            }
        };
        t.schedule(repeatTask, 300, 3000); 
    }

    public static void stopRepeatTask(){
        if(repeatTask!=null){
            repeatTask.cancel();
            Log.d("TIMER", "timer canceled");
        }
        MainActivity.titleMusic.setText("");
        MainActivity.titleMusic.setVisibility(View.GONE);
    }

    public static class Task extends AsyncTask<Void, Void, Void>{
        @Override
        protected Void doInBackground(Void... arg0) {
            try {
                URL url = new URL(soursetrack);
                URLConnection connection = url.openConnection();
                InputStream in = connection.getInputStream();
                filePath = Environment.getExternalStorageDirectory().getAbsolutePath()
                    + "/cashe.xml";
                file = new File (filePath);
                CreateFileFromInputStream(in,  filePath) ;
                // Parse it with document builder factory
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = null;
                dBuilder = dbFactory.newDocumentBuilder();
                Document doc = null;
                doc = dBuilder.parse(file);
                doc.getDocumentElement().normalize();
                // The root element is 
                doc.getDocumentElement().getNodeName();
                NodeList nList = doc.getElementsByTagName("Name");

                for ( int i = 0 ; i < nList.getLength() ; i++ ) {
                    Element element = (Element) nList.item(i) ;
                    dataPlaying = getCharacterDataFromElement(element);
                }
            } catch (MalformedURLException e) {
                e.printStackTrace(); 
            } catch (ParserConfigurationException e) {
                e.printStackTrace(); 
            } catch (SAXException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace(); 
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            if (dataPlaying.equals(MainActivity.currentlyPlaying)){
                if (MainActivity.replay == true){
                    MainActivity.replay = false;
                    MainActivity.titleMusic.setText("" + MainActivity.currentlyPlaying); 
                }
            } else {
                Log.d("MainActivity","Change track");
                MainActivity.currentlyPlaying = dataPlaying;
                MainActivity.titleMusic.setText("" + MainActivity.currentlyPlaying);
                send();
            }
            super.onPostExecute(result);  
        }
    }

    public static void send(){
        notif(MainActivity.currentlyPlaying,MainActivity.currentlyPlaying);
    }

    public static String getCharacterDataFromElement(Element e) {
        Node node = e.getFirstChild();
        if (node instanceof CharacterData) {
            CharacterData cd = (CharacterData) node;
            return cd.getData();
        }
        return "";
    }

    public static void CreateFileFromInputStream(InputStream inStream, String path)
            throws IOException {
        // write the inputStream to a FileOutputStream
        OutputStream out = new FileOutputStream(new File(path));

        int read = 0;
        byte[] bytes = new byte[1024];

        while ((read = inStream.read(bytes)) != -1) {
            out.write(bytes, 0, read);
        }

        inStream.close();
        out.flush();
        out.close();
    }
}

LogCat:

03-12 06:16:21.324: D/MediaService(3475): Change track
03-12 06:16:21.347: D/AndroidRuntime(3475): Shutting down VM
03-12 06:16:21.347: W/dalvikvm(3475): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
03-12 06:16:21.394: E/AndroidRuntime(3475): FATAL EXCEPTION: main
03-12 06:16:21.394: E/AndroidRuntime(3475): java.lang.NullPointerException
03-12 06:16:21.394: E/AndroidRuntime(3475):     at android.content.ComponentName.<init>(ComponentName.java:75)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at android.content.Intent.<init>(Intent.java:3122)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at com.spynetstation.MediaService.notif(MediaService.java:162)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at com.spynetstation.MediaService.send(MediaService.java:250)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at com.spynetstation.MediaService$Task.onPostExecute(MediaService.java:241)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at com.spynetstation.MediaService$Task.onPostExecute(MediaService.java:1)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at android.os.AsyncTask.finish(AsyncTask.java:602)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at android.os.AsyncTask.access$600(AsyncTask.java:156)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at android.os.Looper.loop(Looper.java:137)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at android.app.ActivityThread.main(ActivityThread.java:4424)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at java.lang.reflect.Method.invokeNative(Native Method)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at java.lang.reflect.Method.invoke(Method.java:511)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-12 06:16:21.394: E/AndroidRuntime(3475):     at dalvik.system.NativeStart.main(Native Method)
平行度

我认为是context

代替ctx=this

您可以使用服务getApplicationContext()getBaseContext()在服务内部获取上下文。

尝试使用

ctx= getApplicationContext();

要么

Intent notificationIntent = new Intent(getApplicationContext(), MainActivity.class);

参考:服务中的android启动活动

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

新的Intent(Context,Class)抛出NullPointerException

来自分类Dev

新的Intent(Context,Class)抛出NullPointerException

来自分类Dev

关于在android中创建新的Intent

来自分类Dev

getAction()或Intent上的NullPointerException

来自分类Dev

ListView的OnClickListener以及每个onItemClick的ArrayList中的新Intent数据

来自分类Dev

用于在Android中启动新活动的多个Intent标志

来自分类Dev

NullPointerException在导航抽屉中启动新的活动时

来自分类Dev

从RecyclerViewAdapter启动新的Intent

来自分类Dev

从Intent检索Extras时发生NullPointerException

来自分类Dev

有关Intent Extras的NullPointerException

来自分类Dev

Android 广播通知 NullPointerException on Intent Extra

来自分类Dev

Android / NFC:在没有新Intent的情况下在onCreate()中获取标签

来自分类Dev

Android-在同一个类中创建新的Intent

来自分类Dev

Android StartActivity(Intent)-> NullPointerException(与onclicklistener有关)

来自分类Dev

Android:来自Async的Intent调用引发了NullPointerException

来自分类Dev

Android:从另一个类中调用方法,该方法将启动一个新的Intent

来自分类Dev

如何重写新Intent的onCreate或onPause方法

来自分类Dev

Android REORDER_TO_FRONT用户新的Intent

来自分类Dev

创建显示空指针异常的新Intent

来自分类Dev

片段中OnClickListener的NullPointerException

来自分类Dev

Grails中的NullPointerException错误

来自分类Dev

NullPointerException:DialogAlert中的EditText

来自分类Dev

在Java中避免NullPointerException

来自分类Dev

线程中的NullPointerException

来自分类Dev

HandlerThread中的NullPointerException

来自分类Dev

Android中的layoutinflater nullpointerexception

来自分类Dev

Clojure中的NullPointerException

来自分类Dev

JFrame中的NullPointerException

来自分类Dev

Avro ReflectDatumWriter中的NullPointerException

Related 相关文章

  1. 1

    新的Intent(Context,Class)抛出NullPointerException

  2. 2

    新的Intent(Context,Class)抛出NullPointerException

  3. 3

    关于在android中创建新的Intent

  4. 4

    getAction()或Intent上的NullPointerException

  5. 5

    ListView的OnClickListener以及每个onItemClick的ArrayList中的新Intent数据

  6. 6

    用于在Android中启动新活动的多个Intent标志

  7. 7

    NullPointerException在导航抽屉中启动新的活动时

  8. 8

    从RecyclerViewAdapter启动新的Intent

  9. 9

    从Intent检索Extras时发生NullPointerException

  10. 10

    有关Intent Extras的NullPointerException

  11. 11

    Android 广播通知 NullPointerException on Intent Extra

  12. 12

    Android / NFC:在没有新Intent的情况下在onCreate()中获取标签

  13. 13

    Android-在同一个类中创建新的Intent

  14. 14

    Android StartActivity(Intent)-> NullPointerException(与onclicklistener有关)

  15. 15

    Android:来自Async的Intent调用引发了NullPointerException

  16. 16

    Android:从另一个类中调用方法,该方法将启动一个新的Intent

  17. 17

    如何重写新Intent的onCreate或onPause方法

  18. 18

    Android REORDER_TO_FRONT用户新的Intent

  19. 19

    创建显示空指针异常的新Intent

  20. 20

    片段中OnClickListener的NullPointerException

  21. 21

    Grails中的NullPointerException错误

  22. 22

    NullPointerException:DialogAlert中的EditText

  23. 23

    在Java中避免NullPointerException

  24. 24

    线程中的NullPointerException

  25. 25

    HandlerThread中的NullPointerException

  26. 26

    Android中的layoutinflater nullpointerexception

  27. 27

    Clojure中的NullPointerException

  28. 28

    JFrame中的NullPointerException

  29. 29

    Avro ReflectDatumWriter中的NullPointerException

热门标签

归档