安卓:同时传递意图的空异常 [英] Android:Null exception while passing intent
本文介绍了安卓:同时传递意图的空异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经建立了广播和我想要处理掉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屋!
查看全文