Java 使用Binder.transact()时发生NullPointerException?
这是我的主要活动 我放弃了一些要粘贴在这里的方法,这使得我的代码对于u型人来说更短Java 使用Binder.transact()时发生NullPointerException?,java,android,Java,Android,这是我的主要活动 我放弃了一些要粘贴在这里的方法,这使得我的代码对于u型人来说更短 public class MainActivity extends Activity { private Button btn1,btn2; private Binder binder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCo
public class MainActivity extends Activity {
private Button btn1,btn2;
private Binder binder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button)findViewById(R.id.btn1);
btn2 = (Button)findViewById(R.id.btn2);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondService.class);
bindService(intent, connection, BIND_AUTO_CREATE);
}
});
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeString("from activity: data");
try {
//something wrong here?
binder.transact(0, data, reply, 0);
String string = reply.readString();
System.out.println("actvity --->"+string);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName componentName) {
// TODO Auto-generated method stub
}
@Override
public void onServiceConnected(ComponentName componentName, IBinder binder) {
// TODO Auto-generated method stub
MainActivity.this.binder = (Binder)binder;
}
};
这是我的服务
public class SecondService extends Service{
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return new Mybinder();
}
class Mybinder extends Binder{
@Override
protected boolean onTransact(int code, Parcel data, Parcel reply,
int flags) throws RemoteException {
// TODO Auto-generated method stub
System.out.println("code---->"+code);
String string = data.readString();
System.out.println("s---->"+string);
reply.writeString("reply from :-->service");
return super.onTransact(code, data, reply, flags);
}
}}
日志如下:
它说line55:binder.transact(0,数据,回复,0); 有一些问题,但我不知道为什么
任何答案,谢谢 请在
onCreate
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondService.class);
bindService(intent, connection, BIND_AUTO_CREATE);
请在
onCreate
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondService.class);
bindService(intent, connection, BIND_AUTO_CREATE);
请显示您的清单类。如果您在未单击按钮1的情况下单击按钮2,您将得到该错误,因为您没有初始化绑定对象。我在清单中有服务声明,在单击第二个按钮之前,我总是单击按钮1。请显示您的清单类。如果您在未单击按钮1的情况下单击按钮2,则会出现该错误,因为您没有初始化活页夹对象。我在清单中有服务声明,我总是在单击第二个按钮之前单击按钮1。我用按钮1“on click”方法编写了这些代码,为什么不起作用呢?它不会起作用,除非你单击按钮1.:)我在button1'on click方法中编写了这些代码,为什么它不起作用它不会起作用,直到你点击button1.:)