Удаленный сервис не связывает / asInterface возвращает "ноль" - PullRequest
1 голос
/ 22 сентября 2011

Я создал удаленную службу после примера в этой книге и пытаюсь связать ее с этим действием:

public class TuCanMobileActivity extends Activity {
/** Called when the activity is first created. */
//private HTTPSbrowser mBrowserService;
private HTTPBrowserRemote mBrowserRemoteService;
private Boolean mbound=false;
private ServiceConnection mBrowserRemoteServiceConnection = 
    new ServiceConnection() {           
        @Override
        public void onServiceDisconnected(ComponentName name) {
            try {
                mBrowserRemoteService.unregister_course_callback(courseCallback);
            } catch (RemoteException e) {}
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mBrowserRemoteService=HTTPBrowserRemote.Stub.asInterface(service);
            mbound=true;
            try {
                mBrowserRemoteService.register_course_callback(courseCallback);

            }
            catch (RemoteException e) {
                // TODO: handle exception
            }
        }

};

private final IClassesCallback courseCallback =
    new IClassesCallback.Stub() {
        @Override
        public void expressClassesdata(HTTPSResponse ClassesResponse)
                throws RemoteException {
            Toast.makeText(TuCanMobileActivity.this, "Just works??", Toast.LENGTH_SHORT).show();

            final TextView txtLoginName = 
                (TextView) findViewById(R.id.textView1);
            txtLoginName.setText(ClassesResponse.HTMLResponse);
        }
    };

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}
public void onClickSendLogin (final View sfNormal) {
    final Intent browserIntent = new Intent(TuCanMobileActivity.this,HTTPBrowserRemoteImpl.class);

    this.bindService(browserIntent, mBrowserRemoteServiceConnection, Context.BIND_AUTO_CREATE);
    if(mbound==true){
        Toast.makeText(TuCanMobileActivity.this, "Service Bound", Toast.LENGTH_SHORT).show();
    }
    else {
        Toast.makeText(TuCanMobileActivity.this, "Service NOT Bound", Toast.LENGTH_SHORT).show();
    }
    try {

        mBrowserRemoteService.call_course_overview();


    } catch (RemoteException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    /*final Intent i = new Intent(this,MainMenu.class);
    startActivity(i);*/
    unbindService(mBrowserRemoteServiceConnection);
}
}

Но mBrowsserRemoteService имеет значение null (в методе onClickSendLogin)и возвращает исключение NullPointerException, и я не знаю почему?Также кажется, что метод onBind в сервисе никогда не вызывается.Где моя проблема.

Заранее спасибо Тиде

1 Ответ

2 голосов
/ 10 августа 2012

Причина, по которой вы получаете исключение NullPointerException, заключается в том, что вы выполняете

mBrowserRemoteService.call_course_overview();

независимо от mbound;В этом случае mbound может быть истинным или ложным.

Я подозреваю, что более серьезная проблема заключается в том, что вы не можете связываться с этой службой, скорее всего, потому что ваш AndroidManifest.xml настроен неправильно.Если проблемы не устранены, опубликуйте файл AndroidManifest.

...