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.