Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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服务意外停止_Java_Android_Service_Android Sensors_Android Background - Fatal编程技术网

Java Android服务意外停止

Java Android服务意外停止,java,android,service,android-sensors,android-background,Java,Android,Service,Android Sensors,Android Background,对于我正在制作的android应用程序,我希望有一个服务可以在应用程序未运行时检查a数据库是否存在攻击(有点像facebook在应用程序关闭时如何通知某些东西),因此我制作了下面的类,但在我停止应用程序运行一分钟后,我收到一条消息“应用程序已意外停止”几分钟后,我知道可能会继续检查,因为很多应用程序都会这样做,但我做错了什么? 这就是我到目前为止所做的: package com.ducknoise.toonfight; import java.sql.SQLException; im

对于我正在制作的android应用程序,我希望有一个服务可以在应用程序未运行时检查a数据库是否存在攻击(有点像facebook在应用程序关闭时如何通知某些东西),因此我制作了下面的类,但在我停止应用程序运行一分钟后,我收到一条消息“应用程序已意外停止”几分钟后,我知道可能会继续检查,因为很多应用程序都会这样做,但我做错了什么? 这就是我到目前为止所做的:

    package com.ducknoise.toonfight;

import java.sql.SQLException;

import android.app.NotificationManager;
import android.app.Service;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Build;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationCompat.Builder;
import android.widget.Toast;

public class ToonService extends Service{
    public static ToonService toonService;
    public ToonService(){
        toonService = this;
    }
    @Override
    public IBinder onBind(Intent intent) {
        String toonName = intent.getStringExtra("toonName");
        ToonDB task = new ToonDB();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,toonName);
        } else {
            task.execute(toonName);
        }
        return null;
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        String toonName = intent.getStringExtra("toonName");
        ToonDB task = new ToonDB();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,toonName);
        } else {
            task.execute(toonName);
        }
        return Service.START_STICKY;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public void onDestroy() {
        Toast.makeText(getApplicationContext(), "Disconnected with Server", Toast.LENGTH_LONG).show();
        Database db = new Database();
        db.closeConnection();
        super.onDestroy();
    }

    public class ToonDB extends AsyncTask<String,Void, Void>{

        Toon toon;
        @Override
        protected Void doInBackground(String... params) {
            Database db = new Database();
            db.establishConnection();
            toon = db.getToonFromDB(params[0]);

            return null;

        }
        @Override
        protected void onPostExecute(Void result) {
            ToonCheck task = new ToonCheck();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,toon);
            } else {
                task.execute(toon);
            }
            super.onPostExecute(result);
        }

    }
    public class ToonCheck extends AsyncTask<Toon,Void, Void>{

        boolean runCheck;
        Toon toon;
        @Override
        protected Void doInBackground(Toon... params) {
            runCheck = true;
            Database db = new Database();
            db.establishConnection();
            toon = params[0];
            toon.updateCheckDB();
            publishProgress();
            if(!db.isOnline(toon))
                runCheck = false;

            return null;

        }
        @Override
        protected void onProgressUpdate(Void... values) {
            Battle battle = toon.getBattle();
            if(battle != null ){
                if(battle.notified()){
                    NotificationCompat.Builder nBuilder = new NotificationCompat.Builder(getApplicationContext());
                    nBuilder.setContentTitle("Toon Fight");
                    String contentText = battle.getOppName() + " has attacked you!";
                    nBuilder.setContentText(contentText);
                    nBuilder.setSmallIcon(R.drawable.ic_launcher);
                    int notiID = 1295;
                    NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
                    notificationManager.notify(notiID, nBuilder.build());
                }
            }
            super.onProgressUpdate(values);
        }
        @Override
        protected void onPostExecute(Void result) {
            if(runCheck){
                ToonCheck task = new ToonCheck();
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                    task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,toon);
                } else {
                    task.execute(toon);
                }
            }else 
                stopSelf();
            super.onPostExecute(result);
        }

    }
}
我是这样称呼这项服务的:

Intent toonService = new Intent(MainActivity.this, ToonService.class);
                toonService.putExtra("toonName", toon.getName());
                MainActivity.this.startService(toonService);

您应该根据您的
logcat检查您在
onstart命令中的
intent
是否为
null

03-24 11:01:41.968: E/AndroidRuntime(4624): Caused by: java.lang.NullPointerException
03-24 11:01:41.968: E/AndroidRuntime(4624): at
com.ducknoise.toonfight.ToonService.onStartCommand(ToonService.java:34)

请说明如何启动
服务

,您的日志是…我刚刚发布了Hahay您的
onStartCommand
方法中有一个空指针异常。我刚刚发布了如何调用服务,为什么它会为空/如何使它不为空?我刚刚发布了如何调用服务,为什么它会为空/我如何才能使它不为空?@user3293629这是进程终止后
START\u STICKY
标志的一个特性。尝试使用
START\u REDILIVER\u INTENT
代替,在这里看一看,但是STAR\u REDILIVER\u INTENT不会导致系统关闭服务吗?我想关上它myself@user3293629不,可以用这个标志
03-24 11:01:41.968: E/AndroidRuntime(4624): Caused by: java.lang.NullPointerException
03-24 11:01:41.968: E/AndroidRuntime(4624): at
com.ducknoise.toonfight.ToonService.onStartCommand(ToonService.java:34)