The rows are coming in reverse order. It should be Monday then Tuesday then WednesdayI have a gridview which dynamically fetches data of current week(i.e monday to today). I am facing two issues. 1) My gridView elements are not arranged properly. 2) GridView shows data of that day also whose data does not exists. It simply copies all previous row values. I know rearrangement problem is because of resetPosition variable not getting updated. but if i update it, i get NullPointerException. How can i get rid of these problems?
public class ViewTimeTable extends AppCompatActivity {
private ArrayList<String> mondayStrength,tuesdayStrength,wednesdayStrength,thursdayStrength,fridayStrength;
String [] currentWeek;
int resetPosition;
private Date date;
private Map map;
private int position,pos;
private TextView classTextView,sectionTextView,dateTextView;
private String Class,section,today,day;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one_day_layout);
classTextView = (TextView)findViewById(R.id.class_textView);
sectionTextView = (TextView)findViewById(R.id.section_textView);
dateTextView = (TextView)findViewById(R.id.date_textView);
Intent intent = getIntent();
ParseAnalytics.trackAppOpenedInBackground(intent);
mondayStrength = new ArrayList<String>();
tuesdayStrength = new ArrayList<>();
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if (menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
} catch (Exception ignored) {
}
map = new HashMap();
String[] lectureTimings = {"Lec/Day","I","II","III","IV","V","VI"};
for(int i =0;i<lectureTimings.length;i++){
mondayStrength.add(lectureTimings[i]);
pos = i;
}
System.out.println(position);
ParseQuery<ParseObject> query = ParseQuery.getQuery("Lectures");
GridView mondayRow = (GridView)findViewById(R.id.mon_grid_view);
final GridAdapterChirag mondayAdapter = new GridAdapterChirag(ViewTimeTable.this,R.layout.grid_element, mondayStrength);
mondayRow.setAdapter(mondayAdapter);
System.out.println(position);
currentWeek = getThisWeek();
Class = intent.getStringExtra("Class");
section = intent.getStringExtra("Section");
position = pos+1;
System.out.println(position);
classTextView.append(Class);
sectionTextView.append(section);
resetPosition=position;
String [] day = {"Mon","Tue","Wed","Thu","Fri"};
for(int i=0;i<currentWeek.length;i++) {
mondayStrength.add(position, day[i]);
System.out.print("ResetPosition before loop"+resetPosition);
query.whereEqualTo("Date", currentWeek[i]);
try {
List<ParseObject> objects = query.find();
for (ParseObject object : objects) {
String lid = object.getString("LectureID");
if (lid.substring(7, 9).equals(Class)) {
String m = String.valueOf(lid.charAt(10));
if (m.equals(section)) {
String periodNumber = lid.substring(4, 6);
if (periodNumber.equals("01"))
position += 1;
else if (periodNumber.equals("02"))
position += 2;
else if (periodNumber.equals("03"))
position += 3;
else if (periodNumber.equals("04"))
position += 4;
else if (periodNumber.equals("05"))
position += 5;
else if (periodNumber.equals("06"))
position += 6;
else
position = 100;
map.put(position, object.getString("Strength"));
}
}
System.out.println("ResetPosition"+resetPosition);
System.out.println("Position"+position);
position = resetPosition;
}
System.out.println(map);
for (int k = 1; k <= map.size(); k++) {
mondayStrength.add(resetPosition + k, map.get(resetPosition+k).toString());
}resetPosition+=7;
System.out.println(mondayStrength.size());
//position++;
//mondayAdapter.notifyDataSetChanged();
} catch (ParseException e) {
e.printStackTrace();
}
}
}
//This method simply returns array of dates of current week
private String[] getThisWeek() {
int factor;
ArrayList<String> week = new ArrayList<>();
long oneDay = 86400000;
Calendar calendar = Calendar.getInstance();
long todayInMillis = calendar.getTimeInMillis();
String date;
String todaysDay = new SimpleDateFormat("EEE").format(new Date());
if(todaysDay.equals("Mon"))
factor = 0;
else if(todaysDay.equals("Tue"))
factor = 1;
else if(todaysDay.equals("Wed"))
factor = 2;
else if(todaysDay.equals("Thu"))
factor = 3;
else if(todaysDay.equals("Fri"))
factor = 4;
else if(todaysDay.equals("Sat"))
factor = 5;
else
factor = 6;
for(;factor>=0;factor--){
calendar.setTimeInMillis(todayInMillis-factor*oneDay);
Date d = new Date(calendar.getTimeInMillis());
date = new SimpleDateFormat("dd-MM-yyyy").format(d);
week.add(date);
}
String [] runningWeek = new String[week.size()];
runningWeek = week.toArray(runningWeek);
return runningWeek;
}
LogCat:
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tonystark.adminlogin/com.example.tonystark.adminlogin.ViewTimeTable}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
at android.app.ActivityThread.access$600(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5297)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.tonystark.adminlogin.ViewTimeTable.onCreate(ViewTimeTable.java:126)
at android.app.Activity.performCreate(Activity.java:5122)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
at android.app.ActivityThread.access$600(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5297)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)