2 pipi0 PIPI0 于 2016.01.19 09:00 提问

我一启动service就出现问题,应该是线程的问题,请问怎么解决

package com.s5c.Changlink;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.widget.Toast;

@SuppressLint({ "SimpleDateFormat", "HandlerLeak" })
public class sqlService extends Service {

    SharedPreferences sp;
    String branch,mold,sql,id,Changelocation;
    Thread Change;
    Timer timer;
    Date molds;
    Date data=new Date(System.currentTimeMillis());
    SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    Message message;

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

    public int onStartCommand(Intent intent, int flags, int startId) {

        sp =getSharedPreferences("User", MODE_PRIVATE);
        branch = sp.getString("branch", "");
        mold = sp.getString("mold", "");
        try {
            molds = dateFormater.parse(mold);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        if(molds.before(data)){
            timer.schedule(change, molds, 300000);////代码在这里出错,使程序崩溃
        }else{
            timer.schedule(change, 300000, 300000);
        }

        return super.onStartCommand(intent, flags, startId);
    }

    TimerTask change = new TimerTask(){
        public void run() {  
            message = new Message();      
            message.what = 1;      
            handler.sendMessage(message);    

        }  
    };

    Handler handler = new Handler(){  
        public void handleMessage(Message msg) {  
            switch (msg.what) {      
                case 1:
                    Toast.makeText(sqlService.this, "完全正常", Toast.LENGTH_LONG).show();
                    break;
            }      
            super.handleMessage(msg);  
        }    
    };

    public void onDestroy() {
        Toast.makeText(this, "您将取消服务", Toast.LENGTH_LONG).show();
        super.onDestroy();
    }

    public IBinder onBind(Intent intent) {
        return null;
    }

}


以上就是程序代码,我在造成崩溃的地方有标注,不明白为什么会造成程序崩溃

10个回答

u011665766
u011665766   2016.01.19 10:26
已采纳

你的Timer貌似没有创建。。只看到声明,没见到new

bdmh
bdmh   Ds   Rxr 2016.01.19 09:06

看logcat中的具体错误提示,是不是timer=null了

rui888
rui888   Ds   Rxr 2016.01.19 09:07

你得看看具体log 信息啊

PIPI0
PIPI0   2016.01.19 09:23

图片说明

这就是错误提示,我看到有明显指向的位置就是我代码中提示的位置

meng20166
meng20166   Rxr 2016.01.19 09:50

空引用异常,在控制台打印一下timer是不是没值

enpterexpress
enpterexpress   Rxr 2016.01.19 10:39

这个molds是不是为空

xmt1139057136
xmt1139057136   Rxr 2016.01.19 11:28

log信息不是很全啊

Connery_thunder
Connery_thunder   2016.01.19 11:45

空指针异常,你直接在变量处设置断点用debug调试,专治各种空指针。

pengguichu
pengguichu   2016.01.19 11:47

molds这个值是空 没有new 或者没有给他赋值

crazy1235
crazy1235   Ds   Rxr 2016.01.19 13:56

空指针了。
timer貌似是空的。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
我的问题
我的VS.net总是出现这个问题。请问怎么解决啊 。ISS服务启动,并且电脑无代理。请求
多线程解决生产者与消费者问题
生产者消费者问题是一个很有名的线程同步问题,以前学操作系统时,没怎么搞懂,直到现在学java学到多线程这一块才搞懂。该问题描述的是两个共享固定大小的缓冲区的线程问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据.        要解决该问题,就必须让
我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
package cn.itcast_04; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; /*  * 问题?  * 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添
多线程弊端及解决办法
多线程的弊端 共享数据错误 当多个线程共享数据,且共享区有两条以上代码时,线程切换可能发生在共享区,这时很容易引起数据错误 简单的比方就是本来是一批资源被多个人使用,本来应该是一个人使用结束后再下个人使用,但是现在每个人用一会儿,而且每个人都不知道这个资源还有别人使用,自己只能记录自己使用的情况,如果有个产品使用这个资源要三道工序,第一道供需完了后实际资源被给了其他人,那自己再次使用时记录的还是资
剪贴板应用出现难题及解决
        剪贴板说难也难,说简单也简单 ,关键看应用到什么程度。本来我这个应用算是简单的应用,结果不知道为什么出现了个令人头痛的难题。        我自己做了一个文件管理的工具,其中用到剪贴板来管理文件或目录的拷贝、剪切、粘贴等功能。将数据拷贝到剪贴板中的应用很简单,也没有任何问题,代码例子如下:    int nlen = lstrlen(lpszText);    if (
微服务框架中springboot启动的一个问题
微服务中,采用的是springboot构建单个项目,其中一个项目user启动过程中总是启动补起来,相关的地方都没有错,始终启动不起来,而且要命的是控制台不打印日志,日志级别是debug级别的,但是打印不了错误信息,看不到错误信息,非常奇怪,搞了好久,不能解决。最终解决办法:通过debug启动springboot项目,进入debug后发现错误是由于端口号被占用设置的端口号是8086,也是没问题,然而...
IIS 决 server application error 办法 最终解决
终极解决 IIS出现server application error,请问怎么解决
tomcat启动时,在后台自动执行一线程
功能: 在tomcat启动时,就自动执行一servlet,此servlet隔段时间处理某一操作。
项目上线后遇到的问题总结
项目上线了,一堆堆的问题也随之出现了。除了时间比较匆忙导致没有细致的做验证之外,当初也确实没有在最重要的功能需求上把好关,导致后来要做很多的修改而弥补之前的错误。下面是上线后遇到的问题和解决办法总结。 问题一:(用户非正常流程导致的错误) 用户注册一半就退出来,导致再次注册不成功或者用证件号登陆触发空指针异常。 解决办法: 一旦输入证件号时,检查数据库的表是否有相应的证件号记录,有则把相关
线程同步:解决线程不安全问题
当多个线程并发访问同一个资源对象时,可能会出现线程不安全的问题,比如现有50个苹果,现在有请三个童鞋(小A,小B,小C)上台表演吃苹果.因为A,B,C三个人可以同时吃苹果,此时使用多线程技术来实现这个案例. class Apple implements Runnable{ private int num = 50;//苹果总数 public void run() { for (int