1

So I'm trying to make a simple application that makes stores group events in a MySQL database then retrieves them for people to join. In this fragment I list all the events by using a JSONParser class to query the database. I use an Async class to do the querying. The fragment will initially query the db on startup or whenever the user decides to limit the scope of the events by selecting something in a spinner or when the user pushes a refresh button. I have been getting messages like

Choreographer﹕ Skipped 95 frames! The application may be doing too much work on its main thread.

while running the program and I'm not sure why. I think it might be because I call the Async class too much, but I'm not sure.

public class mainActivityFragment extends Fragment {

    final public String information = "information";

    public Spinner specifySubject;

    private ArrayList<String> list = new ArrayList<>();
    private ArrayList<EventObject> eventList = new ArrayList<>();

    JSONParser jsonParser = new JSONParser();

    ListView test;
    ArrayAdapter adapter;

    // url to create new product
    private static String url_get_event = "";

    private ProgressDialog pDialog;

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.activity_main, container, false);
        adapter = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1, list);
        test = (ListView) v.findViewById(R.id.listView);

        new CreateNewProduct().execute();

        if(pDialog.isShowing()){
            pDialog.dismiss();
        }

        test.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
                Intent in = new Intent(getActivity(), AttendInformation.class);

                EventObject clickedEvent = eventList.get(position);

                String[] testInformation = {clickedEvent.getTo().toString(), clickedEvent.getLocation(), clickedEvent.getTitle(), clickedEvent.getDurationString(), clickedEvent.getDescription(), clickedEvent.getSubject()};
                in.putExtra(information, testInformation);
                startActivity(in);
            }
        });

        Button createEventButton = (Button) v.findViewById(R.id.Button2);

        createEventButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                Intent in = new Intent(getActivity(), createEvent.class);

                startActivity(in);
            }
        });

        specifySubject = (Spinner) v.findViewById(R.id.spinner);
        specifySubject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                AsyncTask task;
                task = new CreateNewProduct().execute();
                try {
                    task.get(3000, TimeUnit.MILLISECONDS);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                } catch (TimeoutException e) {
                    e.printStackTrace();
                }

                if (position == 0) {

                } else {
                    String selectedSubj = getResources().getStringArray(R.array.class_array)[position];
                    for (int i = 0; i < eventList.size(); i++) {
                        if (!eventList.get(i).getSubject().equals(selectedSubj)) {
                            list.remove(list.indexOf(eventList.get(i).getTitle()));
                            eventList.remove(i);
                            i--;
                        }
                    }
                    adapter.notifyDataSetChanged();
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        Button refresh = (Button) v.findViewById(R.id.leftButton);
        refresh.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                AsyncTask task;
                task = new CreateNewProduct().execute();
                try {
                    task.get(3000, TimeUnit.MILLISECONDS);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                } catch (TimeoutException e) {
                    e.printStackTrace();
                }

                if (specifySubject.getSelectedItemPosition() == 0) {

                } else {
                    String selectedSubj = getResources().getStringArray(R.array.class_array)[specifySubject.getSelectedItemPosition()];
                    for (int i = 0; i < eventList.size(); i++) {
                        if (!eventList.get(i).getSubject().equals(selectedSubj)) {
                            list.remove(list.indexOf(eventList.get(i).getTitle()));
                            eventList.remove(i);
                            i--;
                        }
                    }
                    adapter.notifyDataSetChanged();
                }
            }
        });

       return v;
    }

    class CreateNewProduct extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(getActivity());
            pDialog.setMessage("Getting Events...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }

        protected String doInBackground(String... args) {
            JSONArray jsonArr = jsonParser.getJSONFromUrl(url_get_event);
            for(int n = 0; n < jsonArr.length(); n++)
            {
                try {
                    JSONObject object = jsonArr.getJSONObject(n);
                    if(!list.contains(object.getString("title"))){
                    String[] time = object.getString("time").split(":");
                    time[1] = time[1].substring(0, 2);
                    EventObject tempEven = new EventObject(object.getString("title"), object.getString("location"), object.getString("description"), object.getString("subject"), 0, new TimeObject(Integer.parseInt(time[0]), Integer.parseInt(time[1])));
                    eventList.add(tempEven);
                    list.add(object.getString("title"));

                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
            return null;
        }

        protected void onPostExecute(String file_url) {
            // dismiss the dialog once done
            test.setAdapter(adapter);
            pDialog.dismiss();
        }

    }
}
ug_
  • 11,267
  • 2
  • 35
  • 52
kobi
  • 119
  • 1
  • 2
  • 12

0 Answers0