我正在處理一個應用程序。爲了簡單,它有這樣的設計:當我調用bindService時,空指針
的ServiceManager < --------> CommService ------->通過的AsyncTask做的東西......
我想結合我的ServiceManager到CommService。所以,CommService有一個活頁夾。我有一個NullPointerException,我不知道如何解決它。我認爲ServiceConnection沒有完成它的工作,綁定不活躍。
代碼的ServiceManager這裏:
public class CommService extends Service implements IComm {
private final CommBinder binder = new CommBinder(this);
private HttpClient client;
public CommService() {
super();
}
public void onCreate() {
super.onCreate();
this.client = new DefaultHttpClient();
}
@Override
public IBinder onBind(Intent intent) {
return binder;
}
public void onDestroy() {
super.onDestroy();
this.client.getConnectionManager().shutdown();
}
// ============ METHODES A IMPLEMENTER DE L'INTERFACE IComm ==============
@Override
public void getActions(ICommListener listener, String url, String json, String type) {
new SendHttpRequest(listener).execute(url, json, type);
}
CommBinder這裏的代碼:
public class ProbeManagerService extends Service implements ICommManager, ICommListener {
private CommService mService;
private boolean mBound;
private ServiceConnection svc1 = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder rawBinder) {
CommBinder commBinder = (CommBinder) rawBinder;
mService = commBinder.getService();
mBound = true;
}
public void onServiceDisconnected(ComponentName className) {
//commBinder = null;
mBound = false;
}
};
public void onCreate() {
Log.i("ProbeManagerService, onCreate", "passage dans le onCreate du Service");
super.onCreate();
Intent bindIntent = new Intent(this, CommService.class);
//startService(bindIntent); changes nothing with or without this line
bindService(bindIntent, svc1, Context.BIND_AUTO_CREATE);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("ProbeManagerService, onStartCommand", "passage dans le onStartCommand du Service");
this.getActions();
return START_STICKY;
}
public void onDestroy() {
super.onDestroy();
}
@Override
public void getActions() {
if(mBound)
this.mService.getActions(this, urlGetActions, jsonGetActions, GET_ACTIONS);
else
System.out.println("On n'est pasl lié");
}
CommService這裏的代碼
public class CommBinder extends Binder {
private CommService service;
public CommBinder(CommService service) {
this.service = service;
}
public CommService getService() {
return this.service;
}
logcat的位置:
06-19 18:03:35.665: I/ProbeManagerService, onCreate(25705): passage dans le onCreate du Service
06-19 18:03:35.775: I/System.out(25705): fichier lus
06-19 18:03:35.785: I/ProbeManagerService, onStartCommand(25705): passage dans le onStartCommand du Service
06-19 18:03:35.815: D/AndroidRuntime(25705): Shutting down VM
06-19 18:03:35.815: W/dalvikvm(25705): threadid=1: thread exiting with uncaught exception (group=0x40015560)
06-19 18:03:35.855: E/AndroidRuntime(25705): FATAL EXCEPTION: main
06-19 18:03:35.855: E/AndroidRuntime(25705): java.lang.RuntimeException: Unable to start service [email protected] with Intent { cmp=.probecontroller.android.controller/.probecontroller.android.services.ProbeManagerService }: java.lang.NullPointerException
06-19 18:03:35.855: E/AndroidRuntime(25705): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2052)
06-19 18:03:35.855: E/AndroidRuntime(25705): at android.app.ActivityThread.access$2800(ActivityThread.java:117)
06-19 18:03:35.855: E/AndroidRuntime(25705): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:994)
06-19 18:03:35.855: E/AndroidRuntime(25705): at android.os.Handler.dispatchMessage(Handler.java:99)
06-19 18:03:35.855: E/AndroidRuntime(25705): at android.os.Looper.loop(Looper.java:123)
06-19 18:03:35.855: E/AndroidRuntime(25705): at android.app.ActivityThread.main(ActivityThread.java:3683)
06-19 18:03:35.855: E/AndroidRuntime(25705): at java.lang.reflect.Method.invokeNative(Native Method)
06-19 18:03:35.855: E/AndroidRuntime(25705): at java.lang.reflect.Method.invoke(Method.java:507)
06-19 18:03:35.855: E/AndroidRuntime(25705): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-19 18:03:35.855: E/AndroidRuntime(25705): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-19 18:03:35.855: E/AndroidRuntime(25705): at dalvik.system.NativeStart.main(Native Method)
06-19 18:03:35.855: E/AndroidRuntime(25705): Caused by: java.lang.NullPointerException
06-19 18:03:35.855: E/AndroidRuntime(25705): at .probecontroller.android.services.ProbeManagerService.getActions(ProbeManagerService.java:162)
06-19 18:03:35.855: E/AndroidRuntime(25705): at .probecontroller.android.services.ProbeManagerService.onStartCommand(ProbeManagerService.java:124)
06-19 18:03:35.855: E/AndroidRuntime(25705): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2039)
06-19 18:03:35.855: E/AndroidRuntime(25705): ... 10 more
06-19 18:03:51.226: I/Process(25705): Sending signal. PID: 25705 SIG: 9
歡迎任何幫助。在這個問題上工作了幾個小時,我閱讀了很多論壇,帖子,根本沒有任何工作。
這是同樣的問題,但用一個例子: http://stackoverflow.com/questions/9211994/android-trouble-with-bindservice-service-is-null –