다른 작업의 의도와 함께 다른 인스턴스를 저장하는 두 개의 사용자 지정 개체를 보내려고합니다.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 클래스에서 변수에 액세스 할 수 없습니다. 무엇을해야할지 모르겠습니다.
편집 : 또한, 여기
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 –
이야기가 null이 아니 었습니까? –
우선, Serializable 객체가 null이 아니고 intent에 전달한 후 확인하십시오. – Shailesh