Java 无法在Android中停止服务,也无法在ListView中显示收到的消息
在我的一个活动中,我有一个Java 无法在Android中停止服务,也无法在ListView中显示收到的消息,java,android,listview,android-listview,Java,Android,Listview,Android Listview,在我的一个活动中,我有一个列表视图和两个按钮,分别名为“启动服务”和“停止服务” 关于“启动服务”StartServiceActivity.class被调用,它扩展了服务,并在我使用的sendBroadcast方法中传递了一些数据 我的第三个类servicesSecondActivity,它扩展了BroadcastReceiver 接收消息并使用祝酒词将其显示 现在我要做的是,从 BroadcastReceiver并在列表视图上显示它。我已经完成了代码 但是不知道我把BroadcastRecei
列表视图
和两个按钮
,分别名为“启动服务”和“停止服务”
关于“启动服务”StartServiceActivity.class
被调用,它扩展了服务,并在我使用的sendBroadcast
方法中传递了一些数据
我的第三个类servicesSecondActivity
,它扩展了BroadcastReceiver
接收消息并使用祝酒词将其显示
现在我要做的是,从
BroadcastReceiver
并在列表视图上显示它。我已经完成了代码
但是不知道我把BroadcastReceiver
对象的代码放在哪里
它运行
我无法使用“停止服务”按钮停止服务
1) 第一项活动
public class ServiceActivity extends Activity implements OnClickListener {
ListView lstv;
Button bstart, bstop;
private BroadcastReceiver broadcastReceiver;
String data[];
private IntentFilter filter;
Messenger mService;
Boolean mBound;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.service_layout);
bstart = (Button) findViewById(R.id.bStart);
bstop = (Button) findViewById(R.id.bStop);
bstart.setOnClickListener(this);
bstop.setOnClickListener(this);
lstv=(ListView)findViewById(R.id.lst);
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
data = new String[] { intent.getStringExtra("name"),
intent.getStringExtra("message"),
intent.getStringExtra("TimeStamp") };
ArrayAdapter<String> adp=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, data);
lstv.setAdapter(adp);
}
};
registerReceiver(broadcastReceiver, filter);
Toast.makeText(getApplicationContext(), "data : "+ data, Toast.LENGTH_LONG).show();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
unregisterReceiver(broadcastReceiver);
}
@Override
public void onClick(View arg0) {
//registerReceiver(broadcastReceiver, filter);
switch (arg0.getId()) {
case R.id.bStart:
Intent i = new Intent(getApplicationContext(),
StartServiceActivity.class);
startService(i);
break;
case R.id.bStop:
Intent ii = new Intent(getApplicationContext(),
StartServiceActivity.class);
//unregisterReceiver(broadcastReceiver);
stopService(ii);
break;
default:
break;
}
}
}
错误日志
FATAL EXCEPTION: main
java.lang.NullPointerException
at android.app.ContextImpl.stopServiceAsUser(ContextImpl.java:1389)
at android.app.ContextImpl.stopService(ContextImpl.java:1359)
at android.content.ContextWrapper.stopService(ContextWrapper.java:455)
at demo.example.app_5_1_15.ServiceActivity.onClick(ServiceActivity.java:120)
at android.view.View.performClick(View.java:4202)
at android.view.View$PerformClick.run(View.java:17340)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5039)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
(我不懂英语。)
1.我不知道,但是如果你想发送数据,你可以使用安卓系统中的消息。
2.服务是singelton的,所以我可以用“重新启动”来停止它,但用不同的意图来自行停止它
在按钮中:
Intent ii = new Intent(getApplicationContext(),
StartServiceActivity.class);
ii.putExtras("stop",1);
startService(ii);
为您服务:
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent.hasExtra("stop") ) {
//stop it now
stopForeground(true);
stopSelf();
}else{
//.............
}
}thnx谢谢您的回复,但服务仍将继续启动
Intent ii = new Intent(getApplicationContext(),
StartServiceActivity.class);
ii.putExtras("stop",1);
startService(ii);
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent.hasExtra("stop") ) {
//stop it now
stopForeground(true);
stopSelf();
}else{
//.............
}