简体   繁体   中英

Android - GridAdapter issue with Parse Server SDK

I'm getting into Android and I'm an absolute beginner with that, so I hope you can help me with an issue with my custom GridAdapter and Parse SDK, the Logcat doesn't show me any error but the device still crashes without showing any data.

Here's my code [EDITED]:

public class Home extends AppCompatActivity {

/* Views */
ProgressDialog progDialog;


/* Variables */
List<ParseObject> eventsArray = null;



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

    // ProgressDialog
    progDialog = new ProgressDialog(this);
    progDialog.setTitle(R.string.app_name);
    progDialog.setMessage("Loading...");
    progDialog.setIndeterminate(false);
    progDialog.show();

    // Call query
    queryEvents();
}



// MARK: - QUERY EVENTS
public  void queryEvents() {

    ParseQuery<ParseObject> query = ParseQuery.getQuery(Configs.EVENTS_CLASS_NAME);
    query.whereEqualTo(Configs.EVENTS_IS_PENDING, false);
    query.orderByAscending(Configs.EVENTS_END_DATE);
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> objects, ParseException error) {
            if (error == null) {
                eventsArray = objects;
                progDialog.dismiss();


                // CUSTOM GRID ADAPTER
                class GridAdapter extends BaseAdapter {
                    private List<ParseObject> objects;
                    private Context context;


                    public GridAdapter(FindCallback<ParseObject> context, List<ParseObject> objects) {
                        super();
                        this.context = (Context) context;
                        eventsArray = objects;
                    }

                    // CONFIGURE CELL
                    @Override
                    public View getView(int position, View convertView, ViewGroup parent) {
                        LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        View gridView;

                        if (convertView == null) {
                            gridView = new View(context);

                            // Get layout from event_cell.xml
                            gridView = inflater.inflate(R.layout.event_cell, null);

                            // Get title
                            TextView titleTxt = (TextView) gridView.findViewById(R.id.titleTxt);
                            if (eventsArray.get(position).getString(Configs.EVENTS_TITLE) != null) {
                                titleTxt.setText(eventsArray.get(position).getString(Configs.EVENTS_TITLE).toString());
                            } else { titleTxt.setText("N/A"); }




                        } else { gridView = (View) convertView; }

                        return gridView;
                    }

                    @Override
                    public int getCount() {
                        if (eventsArray != null) {
                            return eventsArray.size();
                        }
                        return 0;

                    }

                    @Override
                    public Object getItem(int position) {
                        return eventsArray.get(position);
                    }

                    @Override
                    public long getItemId(int position) {
                        return 0;
                    }
                }


                // Init GridView and set its adapter
                GridView eventsGrid = (GridView) findViewById(R.id.eventsGridView);
                eventsGrid.setAdapter(new GridAdapter(this, eventsArray));

                eventsGrid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                        Toast.makeText(getApplicationContext(), ((TextView) v.findViewById(R.id.titleTxt)).getText(), Toast.LENGTH_SHORT).show();

                    }
                });


                // Error in query
            } else {
                Toast.makeText(getApplicationContext(), error.getMessage().toString(), Toast.LENGTH_LONG).show();
            }

        }
    });

}


} //@end

I've created an event_cell.xml , and I've successfully logged the eventsArray in Home.java so the Parse SDK works fine, I can gather data from my database (in case you'll think it may be an issue caused by retrieving data from Parse Server).

So, what am I doing wrong here?

You can set final Context variable in Activity class. Use this variable in the innerClass(FindCallback)

public  void queryEvents() {
    final Context myContext= this;
    ParseQuery<ParseObject> query = ParseQuery.getQuery(Configs.EVENTS_CLASS_NAME);
    query.whereEqualTo(Configs.EVENTS_IS_PENDING, false);
    query.orderByAscending(Configs.EVENTS_END_DATE);
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> objects, ParseException error) {

            ....
            public GridAdapter(Context context, List<ParseObject> objects) {
                super();
                this.context = context;
                eventsArray = objects;
            }
            ...
            eventsGrid.setAdapter(new GridAdapter(myContext, eventsArray));

        }
    });
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM