2017-04-08 77 views
-1

我试图让自己的画廊。用户可以为每张照片添加评分。 我想要这样的东西:主类将所有照片放在屏幕上。用户点击一张照片,然后他可以添加评分。点击手机上的返回按钮,主类会刷新评分,但意图始终为空。看看代码中的评论。意图 - 空指针异常

//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()); 
     } 
    } 

} 
+0

你为什么不使用'intent'参数? – tynn

+1

,因为我很笨拙...... – PoorGuy

回答

1

使用onNewIntent回调提供意图参数,而不是调用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()); 
     } 
    } 
}