3

そのため、バインドされたサービスをセットアップしましたが、呼び出すたびにサービスのメソッドが呼び出されるbindService()ことはなく、呼び出されることもありません。私が見ることができるエラーはありません。何もスローされません。onBind()onServiceConnected()

private LoggingService mService;
private boolean mBound = false;
private boolean mLogging = false;

private ServiceConnection mConnection = new ServiceConnection() {

    @Override
    public void onServiceConnected(ComponentName className, IBinder service){
        LocalBinder binder = (LocalBinder) service;
        mService = binder.getService();
        mBound = true;
    }

    @Override
    public void onServiceDisconnected(ComponentName arg0){
        mBound = false;
    }
};
...
@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    if(!mBound){
        Intent intent = new Intent(getActivity(), LoggingService.class);
        getActivity().bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
    }
}

このすべてにブレークポイントを配置します。bindService()間違いなく呼び出されますが、どれだけ待ってもonServiceConnected()、サービスで何も呼び出されません。

だから私がここに着くと、それはnullPointerException

logging.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if(mLogging){
                Toast toast = Toast.makeText(getActivity(),
                        "Service stopping", Toast.LENGTH_LONG);
                toast.show();
                mService.stopLogging();
                mLogging = false;
            } else {
                Toast toast = Toast.makeText(getActivity(),
                        "Service Starting", Toast.LENGTH_LONG);
                toast.show();
                mService.startLogging("dude.jsn");
                mLogging = true;
            }
        }
    });

ロギングはButton. 私が何を逃したのか分かりません。これはフラグメントから呼び出されていますが、それは問題ではありませんか? コンテキストはまだ有効です。

public class LoggingService extends Service {
    public static final int LOG_INTERVAL = 500;
    LocalBinder mBinder = new LocalBinder();
    LoggingThread thread;

    public class LocalBinder extends Binder {
        LoggingService getService() {
            return LoggingService.this;
        }
    }

...

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
}

私が見逃したものを指摘する助けは素晴らしいでしょう。

4

0 に答える 0