Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在Android中停止服务,也无法在ListView中显示收到的消息_Java_Android_Listview_Android Listview - Fatal编程技术网

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{
    //.............
    }