空指针异常错误

NullPointerException Error

我是 运行 一个主要的应用程序处理应用程序。但是,我遇到了 NullPointerException 的问题。我已经设法确定错误的来源,但是,我对纠正它一无所知。我能得到一些帮助吗?谢谢你。

错误日志:

07-09 13:03:04.819  19390-19390/apps.robotapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start service com.dapoaugury.apps.robotapp.adapters.RobotService@43163848 with Intent { cmp=com.dapoaugury.apps.robotapp/.adapters.RobotService }: java.lang.NullPointerException: key == null
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2850)
        at android.app.ActivityThread.access00(ActivityThread.java:159)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1419)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5419)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException: key == null
        at android.os.Parcel.readException(Parcel.java:1437)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
        at android.content.ContentProviderProxy.call(ContentProviderNative.java:602)
        at android.provider.Settings$NameValueCache.getStringForUser(Settings.java:934)
        at android.provider.Settings$Secure.getStringForUser(Settings.java:5418)
        at android.provider.Settings$Secure.getString(Settings.java:5389)
        at com.dapoaugury.apps.robotapp.adapters.RobotService.onStart(RobotService.java:66)
        at android.app.Service.onStartCommand(Service.java:450)
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2833)
at android.app.ActivityThread.access00(ActivityThread.java:159)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1419)
 at android.os.Handler.dispatchMessage(Handler.java:99)   
 at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5419)  
at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)at dalvik.system.NativeStart.main(Native Method)

代码片段:

@Override
public void onCreate(Bundle savedInstanceState) {

    String devUUID = Secure.getString(getContentResolver(), ANDROID_ID);
    String devSERIAL = Build.SERIAL.toString();


    super.onCreate(savedInstanceState);

    context = this;

    new Handler().postDelayed(new Runnable(){

        @Override
        public void run(){
            Intent I= new Intent(context, RobotService.class);
            startService(I);
            System.out.println("**start RobotService, AppElapsedTime>900**");
        }
    }, 900);

服务代码:

String devUUID="";
String ANDROID_ID;
String devSERIAL="";
public class RobotService extends Service{

WebView webView;
JSONObject obj = new JSONObject();
JSONArray jsonArray = new JSONArray();
JSONArray jsonArrayData = new JSONArray();
long dt = 0;
long dt_hr;
long dt_elapse;
public static long AppElapsedTime;
private static boolean isRunning = false;

String devUUID = Secure.getString(getContentResolver(), ANDROID_ID);
String devSERIAL = Build.SERIAL.toString();

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

public void onCreate(Bundle savedInstanceState){
    super.onCreate();
    devUUID = android.provider.Settings.Secure.getString(getContentResolver(), ANDROID_ID);
    devSERIAL = android.os.Build.SERIAL.toString();
}

@Override
public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub
    super.onStart(intent, startId);
    devUUID = android.provider.Settings.Secure.getString(getContentResolver(), ANDROID_ID);
    devSERIAL = android.os.Build.SERIAL.toString();

    System.out.println("******start of POST service after elapsed time******");

    if (!isRunning){

        isRunning =true;
        RunningProcess();
        PostList();

        String SPHERE_URL ="https://developer.dapoltd.com/wssoap/hello_json2.php";

        RequestQueue queue = Volley.newRequestQueue(this);

        JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,SPHERE_URL,obj,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        System.out.println("JsonObjectRequest:>>" + response + "<<");
                        //System.out.println(response);
                        //hideProgressDialog();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        //hideProgressDialog();
                    }
                }); queue.add(jsObjRequest);
    }return;
}

private void RunningProcess(){

    // Get running processes
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningAppProcessInfo> runningProcesses = manager.getRunningAppProcesses();

    for (int i=0; i < runningProcesses.size(); i++) {

        jsonArray.put(runningProcesses.get(i).processName);

        try {

            dt = SystemClock.elapsedRealtime() - getStartTime(runningProcesses.get(i).pid);

            android.os.Process currentproc = new Process();
            currentproc.getUidForName(runningProcesses.get(i).processName);

            dt_elapse = currentproc.getElapsedCpuTime();

            //dt = SystemClock.elapsedRealtime() - getStartTime(runningProcesses.get(i).pid);

            //dt = SystemClock.elapsedRealtime() ;


        AppElapsedTime =SystemClock.uptimeMillis()- dt_elapse;
        System.out.println("******AppElapsedTime=******" + AppElapsedTime);

        dt_hr = ( AppElapsedTime / 60000 ) ;
        //System.out.println("runningProcesses:processName:>>" + runningProcesses.get(i).processName +" " + dt_hr + "<<");

        jsonArrayData.put(AppElapsedTime);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

private void PostList(){

    // TO POST LIST in "LIST", "DATA", "ID", "SERIAL"
    try {
        obj.put("list", jsonArray);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    try {
        obj.put("data", jsonArrayData);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    //JSONArray jArray = obj.getJSONArray("list");

    //JSONObject obj = new JSONObject();

    try {
        obj.put("id", devUUID);

    } catch (JSONException e) {
        e.printStackTrace();
    }

    try {
        obj.put("serial", devSERIAL);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    //jsonArray.put(runningProcesses.get(i));
}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    System.out.println("******s of POST service after elapsed time******");
    isRunning = false;
}

错误可能是在传递上下文中。

Intent I= new Intent(CurrentActivity.this, RobotService.class);
  startService(I);

也试试这个 -

new Handler().postDelayed(new Runnable() 
        {

            @Override
            public void run() {
           Intent I= new Intent(context, RobotService.class);
            startService(I);
            }
        }, 900);

对于您的服务失误 -

 String devUUID = "";



public void onCreate(Bundle savedInstanceState){
    super.onCreate();
devUUID = Secure.getString(getContentResolver(), ANDROID_ID);
}

@Override
public void onStart(Intent intent, int startId) {
    // TODO Auto-generated method stub
   super.onStart(intent, startId);
devUUID = Secure.getString(getContentResolver(), ANDROID_ID);
}

对于定时器任务

//TIMER
    new Timer().schedule(new TimerTask() {


        @Override
        public void run() {
            //do your stuff
        }
    },0, 5000);// 5 secs interval