[英]Android service always null
我正在嘗試啟動一項服務,但始終獲得NPE。 我可能做錯了什么? 甚至onServiceConnected()
方法也不會被調用,為什么呢?
@Override
protected void onCreate(Bundle savedInstanceState) {
mServiceIntent = new Intent(this, MyService.class);
bindService(mServiceIntent, mConnection, Context.BIND_AUTO_CREATE);
//other stuff
}
用法:
private okButton(View v) {
startService(mServiceIntent);
}
結果:NullPointerException!
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
Log.v("service", "gets never executed!");
mDownloadService = ((LocalBinder<MyService>) service).getService();
}
@Override
public void onServiceDisconnected(ComponentName className) {
}
};
}
public class LocalBinder<S> extends Binder {
private String TAG = "LocalBinder";
private WeakReference<S> mService;
public LocalBinder(S service){
mService = new WeakReference<S>(service);
}
public S getService() {
return mService.get();
}
}
當然,我在清單中也提供了該服務:
<service android:enabled="true" android:name=".service.MyService" />
Logcat:
06-06 23:48:20.411: W/dalvikvm(592): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
06-06 23:48:20.461: E/AndroidRuntime(592): FATAL EXCEPTION: main
06-06 23:48:20.461: E/AndroidRuntime(592): java.lang.RuntimeException: Unable to start activity ComponentInfo{MyActivity}: java.lang.NullPointerException
06-06 23:48:20.461: E/AndroidRuntime(592): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
06-06 23:48:20.461: E/AndroidRuntime(592): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-06 23:48:20.461: E/AndroidRuntime(592): at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-06 23:48:20.461: E/AndroidRuntime(592): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-06 23:48:20.461: E/AndroidRuntime(592): at android.os.Handler.dispatchMessage(Handler.java:99)
06-06 23:48:20.461: E/AndroidRuntime(592): at android.os.Looper.loop(Looper.java:137)
06-06 23:48:20.461: E/AndroidRuntime(592): at android.app.ActivityThread.main(ActivityThread.java:4424)
06-06 23:48:20.461: E/AndroidRuntime(592): at java.lang.reflect.Method.invokeNative(Native Method)
06-06 23:48:20.461: E/AndroidRuntime(592): at java.lang.reflect.Method.invoke(Method.java:511)
06-06 23:48:20.461: E/AndroidRuntime(592): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-06 23:48:20.461: E/AndroidRuntime(592): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-06 23:48:20.461: E/AndroidRuntime(592): at dalvik.system.NativeStart.main(Native Method)
06-06 23:48:20.461: E/AndroidRuntime(592): Caused by: java.lang.NullPointerException
06-06 23:48:20.461: E/AndroidRuntime(592): at MyActivity.okButton(MyActivity.java:217)
06-06 23:48:20.461: E/AndroidRuntime(592): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1939)
06-06 23:48:20.461: E/AndroidRuntime(592): ... 11 more
意圖似乎還可以:
Log.v("service", String.valueOf(mServiceIntent == null)); //false
您的堆棧跟蹤清楚地顯示了okButton()
發生的NullPointerException
,根據您發布的代碼,該函數中的唯一一行是
startService(mServiceIntent);
因此很明顯,盡管已在onCreate()
設置了mServiceIntent
,但mServiceIntent
還是null。
您還有其他設置mServiceIntent
嗎?
還是您有一個在其中調用okButton()
的構造函數? 我唯一想到的是構造函數將在onCreate()
之前運行。 這也可以解釋為什么即使在onCreate()
調用onServiceConnected()
也永遠不會運行bindService()
onCreate()
。
此代碼不是正確的Java語法,因為方法定義沒有返回類型:
private okButton(View v) {
startService(mServiceIntent);
}
您需要類似:
private void okButton(View v) {
startService(mServiceIntent);
}
在我看來,從該堆棧跟蹤okButton()
方法是在onCreate()方法之前創建MyActivity實例過程中被稱為叫,當然在那個時候MSERVICE將是無效的。
發布更多代碼或更正您發布的代碼,以使其實際上與您使用的代碼匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.