通过意向传递数据不起作用



更新

最后,正如评论中指出的那样,这是一个序列化问题。


因此,我在适配器的ViewHolder中有此方法:

@Override
public void onClick(View view) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
Offer offer = offers.get(position);
Intent intent = new Intent(context, MyOfferActivity.class);
Bundle extras = new Bundle();
extras.putSerializable(Constants.OFFER_INTENT_KEY, offer);
extras.putSerializable(Constants.USER_INTENT_KEY, user);
intent.putExtras(extras);
context.startActivity(intent);
}
}

onCreateViewMyOfferActivity我这样做:

Bundle extras = getIntent().getExtras();
offer = (Offer) extras.getSerializable(Constants.OFFER_INTENT_KEY);
user = (User) extras.getSerializable(Constants.USER_INTENT_KEY);

问题是offer最终会null.我已经调试了它,当我把它放在捆绑包中时,它不是空的。不过,我可以很好地获得user

这以前可以正常工作,并且"神奇地"停止工作。

实际上,最初我正在这样做,并且由于它突然停止工作,因此我将其更改为以前的代码以查看是否可以修复它。它没有。

@Override
public void onClick(View view) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
Offer offer = offers.get(position);
Intent intent = new Intent(context, MyOfferActivity.class);
intent.putExtra(Constants.USER_INTENT_KEY, user);
intent.putExtra(Constants.OFFER_INTENT_KEY, offer);
context.startActivity(intent);
}
}

在接收器上:

offer = (Offer) getIntent().getSerializableExtra(Constants.OFFER_INTENT_KEY);
user = (User) getIntent().getSerializableExtra(Constants.USER_INTENT_KEY); 

能是什么?

我已经尝试了这两个版本的代码,并且还更改了我设置额外内容并接收它们的顺序,但它仍然不起作用。 此外,getIntent().hasExtra(Constants.OFFER_INTENT_KEY)返回 false。

这是错误:

FATAL EXCEPTION: main
Process: com.yournanny, PID: 742
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.yournanny/com.yournanny.activities.offers.MyOfferActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.yournanny.models.Nanny com.yournanny.models.Offer.getAcceptedNanny()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2711)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2772)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1515)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:241)
at android.app.ActivityThread.main(ActivityThread.java:6223)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.yournanny.models.Nanny com.yournanny.models.Offer.getAcceptedNanny()' on a null object reference
at com.yournanny.activities.offers.MyOfferActivity.setContent(MyOfferActivity.java:69)
at com.yournanny.activities.offers.MyOfferActivity.onCreate(MyOfferActivity.java:64)
at android.app.Activity.performCreate(Activity.java:6705)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2664)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2772) 
at android.app.ActivityThread.-wrap12(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1515) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:241) 
at android.app.ActivityThread.main(ActivityThread.java:6223) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

导致它的行是这样的:if (user.getType() == UserType.FAMILY && offer.getAcceptedNanny() == null && offer.getState() == State.REQUESTED)这是我在活动中使用offer的第一个。

您的第二个选项应该可以正常工作。

取代

extras.putSerializable(Constants.OFFER_INTENT_KEY, offer);
extras.putSerializable(Constants.USER_INTENT_KEY, user);

intent.putExtra(Constants.OFFER_INTENT_KEY, offer);
intent.putExtra(Constants.USER_INTENT_KEY, user);

关于您的活动

offer = (Offer) getIntent().getSerializableExtra(Constants.OFFER_INTENT_KEY);
user = (User) getIntent().getSerializableExtra(Constants.USER_INTENT_KEY);

你好@moondaisy, 我建议您使用包裹接口传递数据。这是链接 https://developer.android.com/reference/android/os/Parcelable.html 另请检查此如何使我的自定义对象可包裹?

可包裹接口比 Serilization 更快,使您的应用程序高效。

相关内容

  • 没有找到相关文章

最新更新