0

I have three images stored in a table class called: "events" and table column called: "image" on Parse.com

I used two queries 1 to handle the displaying of the images and one to get another table's information (Those are all Strings)

THE PROBLEM IS: The query that i used to get all the images only displays one of the three images in the RecyclerView instead of all three.

How can i display all three images from Parse.com inside a RecyclerView?

MY MAIN ACTIVITY:

public class MainActivity extends Activity {



//Defining Variables
protected Toolbar toolbar;
protected NavigationView navigationView;
private DrawerLayout drawerLayout;
protected Button mButtonHeader;
protected TextView mDayOfTheWeek;
protected TextView mDate;
//protected Context context;
//private long pageId = 137317903012386L;

private RecyclerView mRecyclerView;

//New Variables
private CustomAdapter mAdapter;


//Weather variables
//private ImageView weatherIconImageView;
private TextView temperatureTextView;
private TextView conditionTextView;
private TextView locationTextView;


private ProgressDialog dialog;
private ProgressDialog progressDialog;


final List<Information> data = new ArrayList<>();



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


    //RecyclerView with Parse
    mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view_layout);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    mAdapter = new CustomAdapter(getApplicationContext(), data);





    //The Query i used to get the three images

    ParseQuery<ParseObject> queryImgs = new ParseQuery<ParseObject>    ("events");
    //queryImgs.orderByAscending("order");
    //queryImgs.setLimit(10);
    queryImgs.findInBackground(new FindCallback<ParseObject>() {

        @Override
        public void done(final List<ParseObject> objects, ParseException e) {
            //for (ParseObject obj_food : objects) {
                //if (obj_food.getInt("order") == order) {

            for (int i = 0; i < objects.size(); i++) {
                    //final ParseFile file = obj_food.getParseFile("image");
                //Information information = new Information();
                //information.mEventsPhotoID = objects.get(i).getParseFile("image");

                final ParseFile file = objects.get(i).getParseFile("image");

                    //bitmap
                    file.getDataInBackground(new GetDataCallback() {
                        public void done(byte[] data, ParseException e) {
                            if (e == null) {
                                Bitmap bmp = BitmapFactory
                                        .decodeByteArray(
                                                data, 0,
                                                data.length);

                                // Get the ImageView from
                                // main.xml

                                mEventsPhotoID = (ParseImageView) findViewById(R.id.eventsPhotoID);
                                //mEventsPhotoIDTwo = (ParseImageView)findViewById(R.id.eventsPhotoID);

                                // Set the Bitmap into the
                                // ImageView
                                mEventsPhotoID.setImageBitmap(bmp);
                                //mEventsPhotoIDTwo.setImageBitmap(bmp);


                            }
                        }
                    });
                //}
                //order++;
            }
            mRecyclerView.setAdapter(mAdapter);
        }
    });



 //Query to load String data into the card view/recycler view
    ParseQuery<ParseObject> query = ParseQuery.getQuery("events");
    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> objects, ParseException e) {

            if (e == null) {

                for (int i = 0; i < objects.size(); i++) {
                    Information information = new Information();

                    information.mNewstTitle = objects.get(i).getString("name");
                    information.mNewsStory = objects.get(i).getString("shortinfo");
                    //information.partyCost = parseObject.getString("partyName");


                    String url=objects.get(i).getParseFile("image").getUrl();


                    //information.mEventsPhotoID = objects.getParseFile("partyFlyerImage");
                    //information.mEventsPhotoID = objects.get(i).getParseFile("image");




                    //information.mNewsPhotoIcon = R.drawable.newsitem));

                    //Initialize ImageView
                    ParseImageView imageViewPicasso = (ParseImageView)  findViewById(R.id.eventsPhotoID);

                    //Loading image from below url into imageView
                    Picasso.with(MainActivity.this)
                            .load(url)
                            .into(imageViewPicasso);



                    data.add(information);
                }
            } else {
                // something went wrong
            }
            //adapter.notifyItemRangeInserted(startPosition, imageUrls.length);
            mRecyclerView.setAdapter(mAdapter);
        }
    });


}//END onCreate



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is   present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            drawerLayout.openDrawer(GravityCompat.START);
            return true;
    }
    return super.onOptionsItemSelected(item);
 }

}//End Main Activity

MY ADAPTER CLASS:

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {
//private List<String> imageUrls = new ArrayList<>();
List<Information> data = Collections.emptyList();
private LayoutInflater inflater;
private Context context;

/*public CustomAdapter (Context context,List<Information>data){
    this.context=context;
    inflater=LayoutInflater.from(context);
    this.data= data;
}*/

public CustomAdapter (Context context,List<Information>data){
    this.context=context;
    inflater=LayoutInflater.from(context);
    this.data= data;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
    View view= inflater.inflate(R.layout.cardview_upcomingshows, parent, false);
    MyViewHolder holder = new MyViewHolder(view);


    return holder;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position){
    Information current= data.get(position);
    //holder.mEventsPhotoID.setImageResource(current.mEventsPhotoID);
    holder.mNewstTitle.setText(current.mNewstTitle);
    holder.mNewsStory.setText(current.mNewsStory);
    holder.mEventsPhotoID.setParseFile(current.mEventsPhotoID);
    //holder.mEventsPhotoIDTwo.setParseFile(current.mEventsPhotoIDTwo);



}

@Override
public int getItemCount(){

    return data.size();
}


class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    //ImageView mEventsPhotoID;
    TextView mNewstTitle;
    TextView mNewsStory;
    ParseImageView mEventsPhotoID;
    //ParseImageView mEventsPhotoIDTwo;



    public MyViewHolder(View itemView) {
        super(itemView);



        //promoterImage = (ParseImageView) itemView.findViewById(R.id.promoterPicImage);
        mEventsPhotoID = (ParseImageView) itemView.findViewById(R.id.eventsPhotoID);
        //mEventsPhotoIDTwo = (ParseImageView) itemView.findViewById(R.id.eventsPhotoIDTwo);
        mNewstTitle = (TextView) itemView.findViewById(R.id.newsTitle);
        mNewsStory = (TextView) itemView.findViewById(R.id.newsStory);


        mNewstTitle.setOnClickListener(this);
        mNewsStory.setOnClickListener(this);
        itemView.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        Toast.makeText(context, "Recycle Click" + getLayoutPosition(), Toast.LENGTH_SHORT).show();

        if(getLayoutPosition()==0){
            Intent intentEventsWebView = new Intent(itemView.getContext(), EventsWebViewActivity.class);
            //intentIndependenceDay.putExtra("MyClass", myclass);
            intentEventsWebView.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            itemView.getContext().startActivity(intentEventsWebView);
        }
        if(getLayoutPosition()==1){
            Intent intentIndependenceDay = new Intent(itemView.getContext(), NextActivity.class);
            //intentIndependenceDay.putExtra("MyClass", myclass);
            intentIndependenceDay.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            itemView.getContext().startActivity(intentIndependenceDay);
        }
        if(getLayoutPosition()==2){
            Intent intentShelleyMaxwellDance = new Intent(itemView.getContext(), OtherActivity.class);
            //intentIndependenceDay.putExtra("MyClass", myclass);
            intentShelleyMaxwellDance.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            itemView.getContext().startActivity(intentShelleyMaxwellDance);
        }


    }
 }
}

MY DATA MODEL CLASS(CONTAINING DATA FOR THE RECYCLER VIEW):

public class Information {

  String mNewstTitle;
  String mNewsStory;
  ParseFile mEventsPhotoID;
}
SwiftArchitect
  • 47,376
  • 28
  • 140
  • 179
Equivocal
  • 912
  • 2
  • 14
  • 27
  • http://stackoverflow.com/a/24076798/294884 – Fattie Sep 15 '15 at 20:47
  • so if loading image files from parse.com doesn't work with picasso why should i use it? if it doesnt work it wont solve the problem – Equivocal Sep 15 '15 at 21:21
  • make sure you are getting intended values in your `url` object, just print it and check whether it is returning the url you want – karan Sep 16 '15 at 05:58
  • When I try to use the picasso method, I get an error message “Target must not be null” and the line of error points to .into(imageViewPicasso); – Equivocal Sep 16 '15 at 07:32
  • Seemingly this is a widespread issue trying to display multiple Parse images in a RecyclerView. I have done vast research and still i am unable to get it to work – Equivocal Sep 16 '15 at 07:34

1 Answers1

0

instead of reading the ParseFile yourself, try using the Url approach mentioned here:

Displaying ParseFile Containing Images Using Their Urls In A RecyclerView

Dror
  • 5,107
  • 3
  • 27
  • 45