Android 意图-空指针异常

Android 意图-空指针异常,android,android-intent,nullpointerexception,Android,Android Intent,Nullpointerexception,我试图建立自己的画廊。用户可以为每张照片添加评级。 我想要这样的东西:主课把所有的照片放在屏幕上。用户单击一张照片,然后可以添加评级。点击手机上的后退按钮,主类刷新等级,但意图总是空的。看看代码中的注释 //My main class. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.

我试图建立自己的画廊。用户可以为每张照片添加评级。 我想要这样的东西:主课把所有的照片放在屏幕上。用户单击一张照片,然后可以添加评级。点击手机上的后退按钮,主类刷新等级,但意图总是空的。看看代码中的注释

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

}
//我的主类。
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=(recyclerView)findViewById(R.id.imagegallery);
recyclerView.setHasFixedSize(true);
RecycleView.LayoutManager LayoutManager=新的GridLayoutManager(getApplicationContext(),2);
recyclerView.setLayoutManager(layoutManager);
createLists=prepareData();
adapter=newmyadapter(getApplicationContext(),createList);
recyclerView.setAdapter(适配器);
}
//我的适配器类从我发送一个意图。
公共MyAdapter(上下文上下文,ArrayList galleryList){
this.galleryList=galleryList;
this.context=上下文;
}
@凌驾
public MyAdapter.ViewHolder onCreateViewHolder(视图组视图组,int i){
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.photo_布局,viewGroup,false);
返回新的ViewHolder(视图);
}
@凌驾
public void onBindViewHolder(最终MyAdapter.ViewHolder ViewHolder,最终int i){
viewHolder.title.setText(galleryList.get(i.getImage_title());
stars=(RatingBar)viewHolder.itemView.findViewById(R.id.ratingBar1);
stars.setRating(galleryList.get(i.getStars());
毕加索。与(上下文)
.load(galleryList.get)(i)
.getImage_ID()).centerCrop()
.调整大小(240240)
.onlyScaleDown()
.into(viewHolder.img);
viewHolder.img.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Intent nextScreen=newintent(上下文,ShowPhotoActivity.class);
nextScreen.putExtra(“fullPhoto”,galleryList.get(i));
nextScreen.setFlags(意图、标志、活动、新任务);
context.startActivity(nextScreen);//一切正常
}
});
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.show_photo_activity_layout);
fullPhoto=(CreateList)getIntent().getSerializableExtra(“fullPhoto”);//正常
photoID=fullPhoto.getImage_ID();
星号=(评级条)findViewById(R.id.评级条);
stars.setRating(fullPhoto.getStars());
如果(savedInstanceState!=null){
stars.setNumStars(savedInstanceState.getInt(starsPoint));
}
mImageView=(ImageView)findViewById(photoID);
mImageView=(ImageView)findViewById(R.id.image1);
setImageResource(photoID);
//message=newintent(getApplicationContext(),MainActivity.class);
stars.setOnRatingBarChangeListener(新的RatingBar.OnRatingBarChangeListener(){
公共无效评级已更改(评级杆、浮动评级、,
布尔值(用户){
全图。集_星(评级);
message=newintent(getApplicationContext(),MainActivity.class);
message.putExtra(“照片”,完整照片);
message.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
System.out.println(fullPhoto.getStars());//好的
星触觉(信息);
}
});
}
//现在我们在主班。总是空的。我已经尝试了堆栈上的所有解决方案
@凌驾
受保护的void onNewIntent(意图){
super.onNewIntent(意向);
CreateList照片=(CreateList)getIntent().getSerializableExtra(“照片”);//空
用于(CreateList photoTemp:CreateList){
if(photoTemp.getImage\u ID()==photo.getImage\u ID()){
photoTemp.set_Stars(photo.getStars());
}
}
}

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

为什么不使用
intent
参数?因为我笨手笨脚。。。