onServiceConnected не вызывается, получая исключение нулевого указателя
Я разработал связанный сервис как отдельный проект, и я пытаюсь получить доступ к сервису от клиента, но я каким-то образом получаю
AndroidRuntime: FATAL EXCEPTION: main
08-08 12:00:40.898 3206 3206 E AndroidRuntime: java.lang.NullPointerException
08-08 12:00:40.898 3206 3206 E AndroidRuntime: at com.test.binder.BinderServiceActivity.onClick(BinderServiceActivity.java:61)
08-08 12:00:40.898 3206 3206 E AndroidRuntime: at android.view.View.performClick(View.java:3526)
08-08 12:00:40.898 3206 3206 E AndroidRuntime: at android.view.View$PerformClick.run(View.java:14139)
08-08 12:00:40.898 3206 3206 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:605)
08-08 12:00:40.898 3206 3206 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:92)
08-08 12:00:40.898 3206 3206 E AndroidRuntime: at android.os.Looper.loop(Looper.java:137)
08-08 12:00:40.898 3206 3206 E AndroidRuntime: на android.app.ActivityThread.main(ActivityThread.java:4725) 08-08 12:00:40.898 3206 3206 E AndroidRuntime: на java.lang.reflect.Method.invokeNative(родной метод)
Я подозреваю, что onServiceConnected не вызывается. Может кто-нибудь помочь мне решить эту проблему.
Заранее спасибо,
Пожалуйста, найдите код клиента ниже:
public class BinderServiceActivity extends Activity implements OnClickListener {
private static final String TAG = "LogActivity";
ILogService logService;
LogConnection conn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Request bind to the service
conn = new LogConnection(); //
Intent intent = new Intent("com.test.binder.ILogService"); //
intent.putExtra("version", "1.0"); //
bindService(intent, conn, Context.BIND_AUTO_CREATE); //
// Attach listener to button
((Button) findViewById(R.id.button1)).setOnClickListener(this);
}
class LogConnection implements ServiceConnection { //
public void onServiceConnected(ComponentName name, IBinder service) { //
logService = ILogService.Stub.asInterface(service); //
Log.i(TAG, "connected");
}
public void onServiceDisconnected(ComponentName name) { //
logService = null;
Log.i(TAG, "disconnected");
}
}
public void onClick(View button) {
try {
logService.log_d("LogClient", "Hello from onClick()"); //
Message msg = new Message(Parcel.obtain()); //
msg.setTag("LogClient");
msg.setText("Hello from inClick() version 1.1");
logService.log(msg); //
} catch (RemoteException e) { //
Log.e(TAG, "onClick failed", e);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroyed");
unbindService(conn); //
logService = null;
}
}
1 ответ
Поскольку вы не разместили полный исходный код, включая Сервис, вам будет трудно уловить вашу проблему. Вы можете скачать Demo Source
для каждого типа привязки услуг с примером и получить быстрое представление. Демо содержит Binding of Service, используя три типа
1.) Связывание с использованием IBinder
2.) Связывание с помощью Messenger
3.) Связывание с использованием AIDL