2017-04-08 6 views
-1

Ich versuche, meine eigene Galerie zu machen. Der Nutzer kann jedem Foto eine Bewertung hinzufügen. Ich möchte etwas wie das: Main-Klasse legte alle Fotos auf einem Bildschirm. Benutzer klicken auf ein Foto, dann kann er eine Bewertung hinzufügen. Klicken Sie auf die Schaltfläche Zurück auf Telefon und Hauptklasse aktualisieren Sie eine Bewertung, aber Absicht ist immer Null. Sehen Sie sich die Kommentare im Code an.Absicht - null Zeiger Ausnahme

//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

Warum Sie nicht über die 'intent' Parameter verwenden? – tynn

+1

weil ich ungeschickt bin ... – PoorGuy

Antwort

1

Verwenden onNewIntent Rückruf bietet Absicht Parameter statt Aufruf getIntent() -Methode, so, Ihr Code wie die Folge sein muss:

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