java.lang.IllegalArgumentException:不是基元字段
我得到了一个错误:java.lang.IllegalArgumentException:不是基元字段,java,android,Java,Android,我得到了一个错误: java.lang.IllegalArgumentException: not a primitive field 行中: class IncomingHandler extends Handler { @Override public void handleMessage(Message msg) { Bundle bundleRequest = msg.getData(); String packageName = bun
java.lang.IllegalArgumentException: not a primitive field
行中:
class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
Bundle bundleRequest = msg.getData();
String packageName = bundleRequest.getString("packageName"); // <-- here
// etc...
如何修复此错误
编辑:添加填充值的方法:
final Messenger mMessenger = new Messenger(new IncomingHandler());
public void onServiceConnected(ComponentName className, IBinder service) {
// etc
try {
// RSE_REGISTER_CLIENT is 0
Message msg = Message.obtain(null, RSE_REGISTER_CLIENT);
msg.replyTo = mMessenger;
Bundle bndlResponse = new Bundle();
bndlResponse.putString("packageName", context.getPackageName());
msg.setData(bndlResponse);
mService.send(msg);
// etc
请显示您填充此
捆绑包的代码
@commonware我在问题中添加了代码。这很奇怪。堆栈跟踪显示Android正在尝试对捆绑包中的可序列化的进行反序列化。你确定没有其他情况下你正在向这个处理程序发送消息
?有更多的情况,是的,但其他都是成功的消息,错误出现在那一行,但有时有错误,有时没有错误,像每个人一样,我想要一个稳定的应用程序,而不是有时的应用程序。这个错误很奇怪,是的。。。我在Android的api 19中测试。您将“Message.what”值设置为“RSE\u REGISTER\u CLIENT”。我想知道“传入处理程序”是否应该在处理捆绑包之前检查这个“什么”(以确保您对自己的消息做出反应,因为处理程序将在UI线程上接收各种消息)我不是把这当作一个答案,因为这是一个“尝试这个”的方法。如果没有更多的代码,我无法重现这个问题-对不起,请显示您填充此捆绑包的代码
@commonware我在问题中添加了代码。这很奇怪。堆栈跟踪显示Android正在尝试对捆绑包中的可序列化的进行反序列化。你确定没有其他情况下你正在向这个处理程序发送消息
?有更多的情况,是的,但其他都是成功的消息,错误出现在那一行,但有时有错误,有时没有错误,像每个人一样,我想要一个稳定的应用程序,而不是有时的应用程序。这个错误很奇怪,是的。。。我在Android的api 19中测试。您将“Message.what”值设置为“RSE\u REGISTER\u CLIENT”。我想知道“传入处理程序”是否应该在处理捆绑包之前检查这个“什么”(以确保您对自己的消息做出反应,因为处理程序将在UI线程上接收各种消息)我不是把这当作一个答案,因为这是一个“尝试这个”的方法。没有更多的代码,我无法重现问题-抱歉
final Messenger mMessenger = new Messenger(new IncomingHandler());
public void onServiceConnected(ComponentName className, IBinder service) {
// etc
try {
// RSE_REGISTER_CLIENT is 0
Message msg = Message.obtain(null, RSE_REGISTER_CLIENT);
msg.replyTo = mMessenger;
Bundle bndlResponse = new Bundle();
bndlResponse.putString("packageName", context.getPackageName());
msg.setData(bndlResponse);
mService.send(msg);
// etc