2017-05-24 150 views
0

更新传递数据不能正常工作

到底这是一个序列化的问题,因为它是在评论中指出。


所以,我有一个适配器的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); 
    } 
} 

而且对MyOfferActivity我这样做了onCreateView

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

的问题是,offer结束up null。我有调试它,当我把它放在束中它不是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活动中的第一个。

+0

在您使用此代码启动时是否存在'MyOfferActivity'的现有实例?你是否在清单中使用'android:launchMode'或其他东西来重用现有的实例? – CommonsWare

+0

我没有使用'android:launchMode',但我不确定在哪里查看是否存在'MyOfferActivity'的现有实例(我正在使用Android Studio) – moondaisy

+0

“我不确定在哪里看查看是否存在现有实例“ - 您是否从代码中的任何其他位置启动了”MyOfferActivity“?有没有一种情况是你从这个代码或其他代码开始启动MyOfferActivity,然后导航离开它(例如,启动一些其他活动而不完成MyOfferActivity),然后再次启动MyOfferActivity? – CommonsWare

回答

0

你的第二个选项应该工作得很好。

更换

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); 
+0

问题是它正在工作,然后停止 – moondaisy

+0

您是否得到错误跟踪?请使用此替代代码发布错误跟踪。 –

+0

为什么downvote?如果是这样,你应该留下一个动机的评论,让我们知道为什么 –