安卓:同时传递意图的空异常 [英] Android:Null exception while passing intent

查看:183
本文介绍了安卓:同时传递意图的空异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经建立了广播和我想要处理掉events.Swap事件工作得很好,当我有没有设置任何服务,但现在似乎有在意向零点异常,因此交换活动无法妥善处理。

该错误是在这一行:

  intentswap.putExtra(交换, -  1);
            sendBroadcast(intentswap);

在code代表我的活动

 保护无效的onCreate(捆绑savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.now_playing);
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        意向I = getIntent();
        位置= i.getIntExtra(数据2,0);
        songdetails = getIntent()getParcelableArrayListExtra(数据1);        // intentswap =新意图(BROADCAST_SWAP);
        bfake =(按钮)findViewById(R.id.bFake);
        尝试
        {intentplaypause =新意图(BROADCAST_PLAYPAUSE);
            意图=新意图(BROADCAST_SEEKBAR);
        serviceIntent =新意图(这一点,Music_service.class);
        initViews();
        setListeners();
        }
        赶上(例外五)
        {}
        playAudio(位置);
        buttonPlayStop.setBackgroundResource(R.drawable.pause);
        boolMusicPlaying = TRUE;
    }    私人无效setListeners(){        bfake.setOnTouchListener(新OnSwipeTouchListener()
         {
             @覆盖
             公共无效onSwipeRight()
         {Z = -1;
         intentswap =新意图(BROADCAST_SWAP);
         intentswap.putExtra(交换, - 1);
                sendBroadcast(intentswap);
             }
             @覆盖
             公共无效onSwipeLeft(){
                    Z = 1;
                    intentswap =新意图(BROADCAST_SWAP);
                    intentswap.putExtra(交换,1);
                        sendBroadcast(intentswap);
                }
               }
                 );
        buttonPlayStop.setOnClickListener(新OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){
                buttonPlayStopClick();
            }
        });
        seekbar.setOnSeekBarChangeListener(本);    }    //不能正常工作,我也有添加暂停和停止不
    私人无效buttonPlayStopClick(){
        如果(!boolMusicPlaying){
            buttonPlayStop.setBackgroundResource(R.drawable.pause);
            playAudio(位置);
            boolMusicPlaying = TRUE;
        }其他{
            如果(boolMusicPlaying){
                buttonPlayStop.setBackgroundResource(R.drawable.play);
                stopMusic_service();
                boolMusicPlaying = FALSE;
            }
        }
    }    私人无效playAudio(INT位置2){        情况2 =位置;
        serviceIntent.putParcelableArrayListExtra(sentAudioLink,songdetails);
        serviceIntent.putExtra(postion_service位置);        尝试{
            startService(serviceIntent);
        }赶上(例外五){            e.printStackTrace();
            Toast.makeText(getApplicationContext(),
                    e.getClass()。的getName()++ e.getMessage(),
                    Toast.LENGTH_LONG).show();
        }
        registerReceiver(广播接收器,新的IntentFilter(
                Music_service.BROADCAST_ACTION));
        mBroadcastIsRegistered = TRUE;
    }    私人无效stopMusic_service(){        如果(mBroadcastIsRegistered){
            尝试{
// unregisterReceiver(广播接收器);
    // mBroadcastIsRegistered = FALSE;
            }赶上(例外五){
                // Log.e(TAG,在活动错误,E);
                // TODO自动生成catch块                e.printStackTrace();
                Toast.makeText(                getApplicationContext(),                e.getClass()。的getName()++ e.getMessage(),                Toast.LENGTH_LONG).show();
            }
        }        尝试{
            stopService(serviceIntent);        }赶上(例外五){
            e.printStackTrace();
            Toast.makeText(getApplicationContext(),
                    e.getClass()。的getName()++ e.getMessage(),
                    Toast.LENGTH_LONG).show();
        }
        boolMusicPlaying = FALSE;
    }    私人无效initViews(){
        buttonPlayStop =(按钮)findViewById(R.id.bPlayPause);
        buttonPlayStop.setBackgroundResource(R.drawable.play);
        搜索栏=(搜索栏)findViewById(R.id.songProgressBar);
    }    @覆盖
    公共无效onProgressChanged(搜索栏某人,INT进步,
            布尔FROMUSER){
         如果(FROMUSER){
             INT seekPos = sb.getProgress();
                intent.putExtra(seekpos,seekPos);
                sendBroadcast(意向);
         }
    }    私人无效showPD(意向bufferIntent){
        字符串bufferValue = bufferIntent.getStringExtra(缓冲);
        INT bufferIntValue =的Integer.parseInt(bufferValue);        //当广播缓冲值是1,显示缓冲
        //进步对话。
        //当广播缓冲值是0,驳回进度
        //对话。        开关(bufferIntValue){        //监听2的按钮复位到一个播放按钮
        案例2:
            buttonPlayStop.setBackgroundResource(R.drawable.play);
            打破;        }
    }    私人广播接收器广播接收器=新的广播接收器(){
        @覆盖
        公共无效的onReceive(上下文的背景下,意图serviceIntent){
            的updateUI(serviceIntent);
        }
    };    私人无效的updateUI(意向serviceIntent){
        串计数器= serviceIntent.getStringExtra(反);
        串mediamax = serviceIntent.getStringExtra(mediamax);
        串strSongEnded = serviceIntent.getStringExtra(song_ended);
        INT seekProgress =的Integer.parseInt(柜);
        seekMax =的Integer.parseInt(mediamax);
        songEnded =的Integer.parseInt(strSongEnded);
        seekbar.setMax(seekMax);
        seekbar.setProgress(seekProgress);
        如果(songEnded == 1){
            buttonPlayStop.setBackgroundResource(R.drawable.play);
        }
    }    私人广播接收器broadcastBufferReceiver =新的广播接收器(){
        @覆盖
        公共无效的onReceive(上下文的背景下,意图bufferIntent){
            showPD(bufferIntent);
        }
    };    @覆盖
    保护无效的onPause(){
        //注销广播接收器
    尝试{如果(mBroadcastIsRegistered){
            unregisterReceiver(broadcastBufferReceiver);
            mBroadcastIsRegistered = FALSE;
        }}赶上(例外五){}
        super.onPause();
    }    // - onResume注册广播接收器。为了改善,恢复保存
    //屏幕数据---
    @覆盖
    保护无效onResume(){
        //注册广播接收器
        如果(!mBroadcastIsRegistered){
            registerReceiver(broadcastBufferReceiver,新的IntentFilter(
                    Music_service.BROADCAST_BUFFER));
            mBroadcastIsRegistered = TRUE;
        }
        super.onResume();
    }    @覆盖
    公共无效onStartTrackingTouch(搜索栏搜索栏){
        // TODO自动生成方法存根    }    @覆盖
    公共无效onStopTrackingTouch(搜索栏搜索栏){
        // TODO自动生成方法存根    }
}

在logcat的

  1月10日至11日:52:18.734:W / System.err的(561):在android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:294)
1月10日至11日:52:18.734:W / System.err的(561):在source.justanothermusicplayer.NowPlaying $ 3.onSwipeLeft(NowPlaying.java:88)
1月10日至11日:52:18.744:W / System.err的(561):在source.justanothermusicplayer.classes.OnSwipeTouchListener$GestureListener.onFling(OnSwipeTouchListener.java:45)
1月10日至11日:52:18.744:W / System.err的(561):在android.view.GestureDetector.onTouchEvent(GestureDetector.java:579)
1月10日至11日:52:18.744:W / System.err的(561):在source.justanothermusicplayer.classes.OnSwipeTouchListener.onTouch(OnSwipeTouchListener.java:16)
1月10日至11日:52:18.744:W / System.err的(561):在android.view.View.dispatchTouchEvent(View.java:5481)
1月10日至11日:52:18.744:W / System.err的(561):在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
1月10日至11日:52:18.744:W / System.err的(561):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
1月10日至11日:52:18.754:W / System.err的(561):在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
1月10日至11日:52:18.764:W / System.err的(561):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
1月10日至11日:52:18.764:W / System.err的(561):在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
1月10日至11日:52:18.764:W / System.err的(561):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
1月10日至11日:52:18.764:W / System.err的(561):在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
1月10日至11日:52:18.764:W / System.err的(561):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
1月10日至11日:52:18.774:W / System.err的(561):在com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1892)
1月10日至11日:52:18.774:W / System.err的(561):在com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1371)
1月10日至11日:52:18.774:W / System.err的(561):在android.app.Activity.dispatchTouchEvent(Activity.java:2364)
1月10日至11日:52:18.784:W / System.err的(561):在com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:1840)
1月10日至11日:52:18.794:W / System.err的(561):在android.view.View.dispatchPointerEvent(View.java:5662)
1月10日至11日:52:18.794:W / System.err的(561):在android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2863)
1月10日至11日:52:18.794:W / System.err的(561):在android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
1月10日至11日:52:18.814:W / System.err的(561):在android.os.Handler.dispatchMessage(Handler.java:99)
1月10日至11日:52:18.814:W / System.err的(561):在android.os.Looper.loop(Looper.java:137)
1月10日至11日:52:18.824:W / System.err的(561):在android.app.ActivityThread.main(ActivityThread.java:4340)
1月10日至11日:52:18.824:W / System.err的(561):在java.lang.reflect.Method.invokeNative(本机方法)
1月10日至11日:52:18.824:W / System.err的(561):在java.lang.reflect.Method.invoke(Method.java:511)
1月10日至11日:52:18.834:W / System.err的(561):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784)
1月10日至11日:52:18.834:W / System.err的(561):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
1月10日至11日:52:18.834:W / System.err的(561):在dalvik.system.NativeStart.main(本机方法)


解决方案

很难说,但你可以尝试打开你的意图是这样,而不是.-

  intentswap =新意图(YourActivityClass.this,ActivityToOpen.class);
intentswap.putExtra(交换,1);
openIntent(intentswap);

I have setup a broadcast and I want to handle swap events.Swap events worked fine when I hadn't setup any service,but now there seems to be a null point exception in the intent and hence the swap events are not being handled properly.

the error is in this line:

intentswap.putExtra("swap",-1 );
            sendBroadcast(intentswap);

The code for my activity

protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.now_playing);
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        Intent i = getIntent();
        position = i.getIntExtra("Data2", 0);
        songdetails = getIntent().getParcelableArrayListExtra("Data1");

        //intentswap=new Intent(BROADCAST_SWAP);
        bfake=(Button)findViewById(R.id.bFake);
        try 
        {   intentplaypause=new Intent(BROADCAST_PLAYPAUSE);
            intent = new Intent(BROADCAST_SEEKBAR);
        serviceIntent = new Intent(this, Music_service.class);
        initViews();
        setListeners();
        }
        catch(Exception e)
        {}
        playAudio(position);
        buttonPlayStop.setBackgroundResource(R.drawable.pause);
        boolMusicPlaying = true;




    }



    private void setListeners() {

        bfake.setOnTouchListener(new OnSwipeTouchListener()
         {          
             @Override
             public void onSwipeRight() 
         { z=-1;
         intentswap=new Intent(BROADCAST_SWAP);
         intentswap.putExtra("swap",-1 );
                sendBroadcast(intentswap);
             }
             @Override
             public void onSwipeLeft() {
                    z=1;
                    intentswap=new Intent(BROADCAST_SWAP);
                    intentswap.putExtra("swap",1 );
                        sendBroadcast(intentswap);
                }
               }
                 );
        buttonPlayStop.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonPlayStopClick();
            }
        });
        seekbar.setOnSeekBarChangeListener(this);

    }

    // not working correctly,also i have to add pause and not stop
    private void buttonPlayStopClick() {
        if (!boolMusicPlaying) {
            buttonPlayStop.setBackgroundResource(R.drawable.pause);
            playAudio(position);
            boolMusicPlaying = true;
        } else {
            if (boolMusicPlaying) {
                buttonPlayStop.setBackgroundResource(R.drawable.play);
                stopMusic_service();
                boolMusicPlaying = false;
            }
        }
    }

    private void playAudio(int position2) {

        position2 = position;
        serviceIntent.putParcelableArrayListExtra("sentAudioLink", songdetails);
        serviceIntent.putExtra("postion_service", position);

        try {
            startService(serviceIntent);
        } catch (Exception e) {

            e.printStackTrace();
            Toast.makeText(getApplicationContext(),
                    e.getClass().getName() + " " + e.getMessage(),
                    Toast.LENGTH_LONG).show();
        }
        registerReceiver(broadcastReceiver, new IntentFilter(
                Music_service.BROADCAST_ACTION));
        mBroadcastIsRegistered = true;
    }

    private void stopMusic_service() {

        if (mBroadcastIsRegistered) {
            try {
//              unregisterReceiver(broadcastReceiver);
    //          mBroadcastIsRegistered = false;
            } catch (Exception e) {
                // Log.e(TAG, "Error in Activity", e);
                // TODO Auto-generated catch block

                e.printStackTrace();
                Toast.makeText(

                getApplicationContext(),

                e.getClass().getName() + " " + e.getMessage(),

                Toast.LENGTH_LONG).show();
            }
        }

        try {
            stopService(serviceIntent);

        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(getApplicationContext(),
                    e.getClass().getName() + " " + e.getMessage(),
                    Toast.LENGTH_LONG).show();
        }
        boolMusicPlaying = false;
    }

    private void initViews() {
        buttonPlayStop = (Button) findViewById(R.id.bPlayPause);
        buttonPlayStop.setBackgroundResource(R.drawable.play);
        seekbar = (SeekBar) findViewById(R.id.songProgressBar);
    }

    @Override
    public void onProgressChanged(SeekBar sb, int progress,
            boolean fromUser) {
         if (fromUser) {
             int seekPos = sb.getProgress();
                intent.putExtra("seekpos", seekPos);
                sendBroadcast(intent);
         }
    }

    private void showPD(Intent bufferIntent) {
        String bufferValue = bufferIntent.getStringExtra("buffering");
        int bufferIntValue = Integer.parseInt(bufferValue);

        // When the broadcasted "buffering" value is 1, show "Buffering"
        // progress dialogue.
        // When the broadcasted "buffering" value is 0, dismiss the progress
        // dialogue.

        switch (bufferIntValue) {

        // Listen for "2" to reset the button to a play button
        case 2:
            buttonPlayStop.setBackgroundResource(R.drawable.play);
            break;

        }
    }

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent serviceIntent) {
            updateUI(serviceIntent);
        }
    };

    private void updateUI(Intent serviceIntent) {
        String counter = serviceIntent.getStringExtra("counter");
        String mediamax = serviceIntent.getStringExtra("mediamax");
        String strSongEnded = serviceIntent.getStringExtra("song_ended");
        int seekProgress = Integer.parseInt(counter);
        seekMax = Integer.parseInt(mediamax);
        songEnded = Integer.parseInt(strSongEnded);
        seekbar.setMax(seekMax);
        seekbar.setProgress(seekProgress);
        if (songEnded == 1) {
            buttonPlayStop.setBackgroundResource(R.drawable.play);
        }
    }

    private BroadcastReceiver broadcastBufferReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent bufferIntent) {
            showPD(bufferIntent);
        }
    };

    @Override
    protected void onPause() {
        // Unregister broadcast receiver
    try{    if (mBroadcastIsRegistered) {
            unregisterReceiver(broadcastBufferReceiver);
            mBroadcastIsRegistered = false;
        }}catch (Exception e){}
        super.onPause();
    }

    // -- onResume register broadcast receiver. To improve, retrieve saved
    // screen data ---
    @Override
    protected void onResume() {
        // Register broadcast receiver
        if (!mBroadcastIsRegistered) {
            registerReceiver(broadcastBufferReceiver, new IntentFilter(
                    Music_service.BROADCAST_BUFFER));
            mBroadcastIsRegistered = true;
        }
        super.onResume();
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub

    }
}

the logcat

10-11 01:52:18.734: W/System.err(561):  at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:294)
10-11 01:52:18.734: W/System.err(561):  at source.justanothermusicplayer.NowPlaying$3.onSwipeLeft(NowPlaying.java:88)
10-11 01:52:18.744: W/System.err(561):  at source.justanothermusicplayer.classes.OnSwipeTouchListener$GestureListener.onFling(OnSwipeTouchListener.java:45)
10-11 01:52:18.744: W/System.err(561):  at android.view.GestureDetector.onTouchEvent(GestureDetector.java:579)
10-11 01:52:18.744: W/System.err(561):  at source.justanothermusicplayer.classes.OnSwipeTouchListener.onTouch(OnSwipeTouchListener.java:16)
10-11 01:52:18.744: W/System.err(561):  at android.view.View.dispatchTouchEvent(View.java:5481)
10-11 01:52:18.744: W/System.err(561):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
10-11 01:52:18.744: W/System.err(561):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
10-11 01:52:18.754: W/System.err(561):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
10-11 01:52:18.764: W/System.err(561):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
10-11 01:52:18.764: W/System.err(561):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
10-11 01:52:18.764: W/System.err(561):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
10-11 01:52:18.764: W/System.err(561):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1959)
10-11 01:52:18.764: W/System.err(561):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1728)
10-11 01:52:18.774: W/System.err(561):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1892)
10-11 01:52:18.774: W/System.err(561):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1371)
10-11 01:52:18.774: W/System.err(561):  at android.app.Activity.dispatchTouchEvent(Activity.java:2364)
10-11 01:52:18.784: W/System.err(561):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1840)
10-11 01:52:18.794: W/System.err(561):  at android.view.View.dispatchPointerEvent(View.java:5662)
10-11 01:52:18.794: W/System.err(561):  at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2863)
10-11 01:52:18.794: W/System.err(561):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
10-11 01:52:18.814: W/System.err(561):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-11 01:52:18.814: W/System.err(561):  at android.os.Looper.loop(Looper.java:137)
10-11 01:52:18.824: W/System.err(561):  at android.app.ActivityThread.main(ActivityThread.java:4340)
10-11 01:52:18.824: W/System.err(561):  at java.lang.reflect.Method.invokeNative(Native Method)
10-11 01:52:18.824: W/System.err(561):  at java.lang.reflect.Method.invoke(Method.java:511)
10-11 01:52:18.834: W/System.err(561):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-11 01:52:18.834: W/System.err(561):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
10-11 01:52:18.834: W/System.err(561):  at dalvik.system.NativeStart.main(Native Method)

解决方案

Hard to tell, but you could try opening you intents like this instead.-

intentswap = new Intent(YourActivityClass.this, ActivityToOpen.class);
intentswap.putExtra("swap",1 );
openIntent(intentswap);

这篇关于安卓:同时传递意图的空异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆