空指针异常错误
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
我是 运行 一个主要的应用程序处理应用程序。但是,我遇到了 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