Android - GridAdapter issue with Parse Server SDK

本秂侑毒 提交于 2019-12-13 07:29:18

问题


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?


回答1:


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));

        }
    });
}


来源:https://stackoverflow.com/questions/37585088/android-gridadapter-issue-with-parse-server-sdk

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!