意图 - 空指针异常

时间:2017-04-08 11:27:00

标签: android android-intent nullpointerexception

我尝试制作自己的画廊。用户可以为每张照片添加评级。 我想要这样的东西:主类将所有照片放在屏幕上。用户点击照片然后他可以添加评级。单击手机上的后退按钮,主类刷新评级,但意图始终为空。看看代码中的评论。

//My main class.
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    recyclerView = (RecyclerView)findViewById(R.id.imagegallery);
    recyclerView.setHasFixedSize(true);

    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),2);
    recyclerView.setLayoutManager(layoutManager);
    createLists = prepareData();
    adapter = new MyAdapter(getApplicationContext(), createLists);
    recyclerView.setAdapter(adapter);
}



 //My Adapter class from I send an Intent.
 public MyAdapter(Context context, ArrayList<CreateList> galleryList) {
    this.galleryList = galleryList;
    this.context = context;
}

     @Override
     public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.photo_layout, viewGroup, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(final MyAdapter.ViewHolder viewHolder, final int i) {

    viewHolder.title.setText(galleryList.get(i).getImage_title());
    stars = (RatingBar) viewHolder.itemView.findViewById(R.id.ratingBar1);

    stars.setRating(galleryList.get(i).getStars());


    Picasso.with(context)
            .load(galleryList.get(i)
                    .getImage_ID()).centerCrop()
            .resize(240, 240)
            .onlyScaleDown()
            .into(viewHolder.img);
    viewHolder.img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent nextScreen = new Intent(context, ShowPhotoActivity.class);

            nextScreen.putExtra("fullPhoto", galleryList.get(i));


            nextScreen.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(nextScreen);  //everything is OKAY

        }
    });

}

     protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.show_photo_activity_layout);


    fullPhoto = (CreateList) getIntent().getSerializableExtra("fullPhoto");  //IS OKAY
    photoID = fullPhoto.getImage_ID();

    stars = (RatingBar)findViewById(R.id.ratingBar);


    stars.setRating(fullPhoto.getStars());
    if(savedInstanceState != null){
        stars.setNumStars(savedInstanceState.getInt(starsPoint));
    }

    mImageView = (ImageView) findViewById(photoID);
    mImageView = (ImageView) findViewById(R.id.image1);
    mImageView.setImageResource(photoID);
    //message = new Intent(getApplicationContext(), MainActivity.class);
    stars.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
        public void onRatingChanged(RatingBar ratingBar, float rating,
                                    boolean fromUser) {

            fullPhoto.set_Stars(rating);
            message = new Intent(getApplicationContext(), MainActivity.class);
            message.putExtra("Photo", fullPhoto);


            message.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
            System.out.println(fullPhoto.getStars());  //OKAY
            startActivity(message);
}
    });

}


 //Now we are in main class. ALWAYS null. I've tried every solution on stack
@Override
protected void onNewIntent(Intent intent) {

    super.onNewIntent(intent);

    CreateList photo = (CreateList) getIntent().getSerializableExtra("Photo");  //NULL

    for(CreateList photoTemp : createLists) {
        if (photoTemp.getImage_ID() == photo.getImage_ID()) {
            photoTemp.set_Stars(photo.getStars());
        }
    }

}

1 个答案:

答案 0 :(得分:1)

使用onNewIntent回调提供intent参数而不是调用getIntent()方法,因此,您的代码必须如下所示:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    CreateList photo = (CreateList) intent.getSerializableExtra("Photo");
    for(CreateList photoTemp : createLists) {
        if (photoTemp.getImage_ID() == photo.getImage_ID()) {
            photoTemp.set_Stars(photo.getStars());
        }
    }
}