Я пытаюсь отправить два пользовательских объекта, один из которых хранит экземпляр другого, а также намерение другого действия. Оба эти компиляторы реализуют Serializable, например, так:Intent.getSerializableExtra возвращает null
public class Story implements Serializable {
private String title, author;
private ArrayList<StorySegment> segments;
... }
class StorySegment implements Serializable {
private String author;
private String contents;
... }
И в моем классе StoryOverviewAdapter, у меня есть это:
public class StoryOverviewAdapter extends ArrayAdapter<Story> {
public StoryOverviewAdapter(Context ctx, ArrayList<Story> stories) {
super(ctx, 0, stories);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(
R.layout.story_overview_item, parent, false);
}
final Story story = getItem(position);
TextView tvStoryTitle = (TextView) convertView.findViewById(R.id.tv_story_title);
tvStoryTitle.setText(story.getTitle());
TextView tvStoryOpening = (TextView) convertView.findViewById(R.id.tv_story_opening);
tvStoryOpening.setText(story.getSegment(0).getContents());
ImageView ivUserPicture = (ImageView) convertView.findViewById(R.id.iv_user_picture);
ivUserPicture.setTag(position);
ivUserPicture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Show user profile
}
});
LinearLayout llStoryLayout = (LinearLayout) convertView.findViewById(R.id.story_layout);
llStoryLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), StoryActivity.class);
intent.putExtra("story", story);
getContext().startActivity(intent);
}
});
return convertView;
}
}
Когда я иду, чтобы вытащить эту информацию из моего Намерения в приемной деятельности. ..
Intent intent = getIntent();
Story story = (Story) intent.getSerializableExtra("story");
... А затем попытаться проверить свой код, я получаю это:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.Serializable android.content.Intent.getSerializableExtra(java.lang.String)' on a null object reference
И я понятия не имею, почему. Я думал, что, возможно, удаление «final» из переменной истории избавится от нее, но я не могу получить доступ к переменной изнутри моего внутреннего класса OnClickListener без нее. Не уверен, что делать.
EDIT: Кроме того, вот код, который показывает, что я добавил историю ...
public class OverviewActivity extends AppCompatActivity {
ArrayList<Story> stories = new ArrayList<Story>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_overview);
stories.add(new Story("Lorem Ipsum", "Firstname Lastname",
new StorySegment("Firstname Lastname", "Lorem ipsum dolor sit amet, lorem ipsum dolor sit amet, lorem ipsum dolor sit amet...")));
StoryOverviewAdapter storyOverviewAdapter = new StoryOverviewAdapter(this, stories);
ListView listView = (ListView) findViewById(R.id.story_overview_list);
listView.setAdapter(storyOverviewAdapter);
}
}
Проверьте это слишком http://stackoverflow.com/questions/37646466/attempt-to-invoke-virtual-method-on -a-null-object-reference-for-video-id –
Вы уверены, что ваша история не является нулевой? –
Пожалуйста, сначала проверьте, что ваш объект Serializable не равен null, после того как вы перейдете в цель. – Shailesh