简体   繁体   中英

How to shorten this java code?

I am making a timetable app for android and loading a JSON file with all the data to be parsed in a table of TextView s.

It's a lot of copy paste work. Now I'm using a lot of the same code. Is it possible to shorten this code? If so, how ?

        resetrooster();             
    String jsonStr = jsonStr(); 

    try {
        JSONObject jsonObj = new JSONObject(jsonStr);

        //JSON Array node
        removed_classes = jsonObj.getJSONArray(TAG_REMOVED_CLASSES);
        classes = jsonObj.getJSONArray(TAG_CLASSES);
        new_classes = jsonObj.getJSONArray(TAG_NEW_CLASSES);


        //Looping through all lessons
        for (int i = 0; i < classes.length(); i++) {
            JSONObject c = classes.getJSONObject(i);

            String day = c.getString(TAG_DAY);
            String room = c.getString(TAG_ROOM);
            String hour = c.getString(TAG_HOUR);
            String classs = c.getString(TAG_CLASSS);
            String teacher = c.getString(TAG_TEACHER);

            //Fill in the right lessons for the right day
            if (theday == 1){
                if (day.contains("1")){
                    if (hour.contains("1") && !hour.contains("10") && !hour.contains("11") && !hour.contains("12") && !hour.contains("13") ){
                        uur1.setText(hour); doc1.setText(teacher); vak1.setText(classs); lok1.setText(room);}
                        if (hour.contains("2")&& !hour.contains("12")){
                            uur2.setText(hour); doc2.setText(teacher); vak2.setText(classs); lok2.setText(room);}
                        if (hour.contains("3")&& !hour.contains("13")){
                            uur3.setText(hour); doc3.setText(teacher); vak3.setText(classs); lok3.setText(room);}
                        if (hour.contains("4")){
                            uur4.setText(hour); doc4.setText(teacher); vak4.setText(classs); lok4.setText(room);}
                        if (hour.contains("5")){
                            uur5.setText(hour); doc5.setText(teacher); vak5.setText(classs); lok5.setText(room);}
                        if (hour.contains("6")){
                            uur6.setText(hour); doc6.setText(teacher); vak6.setText(classs); lok6.setText(room);}
                        if (hour.contains("7")){
                            uur7.setText(hour); doc7.setText(teacher); vak7.setText(classs); lok7.setText(room);}
                        if (hour.contains("8")){
                            uur8.setText(hour); doc8.setText(teacher); vak8.setText(classs); lok8.setText(room);}
                        if (hour.contains("9")){
                            uur9.setText(hour); doc9.setText(teacher); vak9.setText(classs); lok9.setText(room);}
                        if (hour.contains("10")){
                            uur10.setText(hour); doc10.setText(teacher); vak10.setText(classs); lok10.setText(room);}
                        if (hour.contains("11")){
                            uur11.setText(hour); doc11.setText(teacher); vak11.setText(classs); lok11.setText(room);}
                        if (hour.contains("12")){
                            uur12.setText(hour); doc12.setText(teacher); vak12.setText(classs); lok12.setText(room);}
                        if (hour.contains("13")){
                            uur13.setText(hour); doc13.setText(teacher); vak13.setText(classs); lok13.setText(room);}

                    }}
            else if (theday == 2){
                if (day.contains("2")){
                        if (hour.contains("1") && !hour.contains("10") && !hour.contains("11") && !hour.contains("12") && !hour.contains("13") ){
                            uur1.setText(hour); doc1.setText(teacher); vak1.setText(classs); lok1.setText(room);}
                        if (hour.contains("2")&& !hour.contains("12")){
                            uur2.setText(hour); doc2.setText(teacher); vak2.setText(classs); lok2.setText(room);}
                        if (hour.contains("3")&& !hour.contains("13")){
                            uur3.setText(hour); doc3.setText(teacher); vak3.setText(classs); lok3.setText(room);}
                        if (hour.contains("4")){
                            uur4.setText(hour); doc4.setText(teacher); vak4.setText(classs); lok4.setText(room);}
                        if (hour.contains("5")){
                            uur5.setText(hour); doc5.setText(teacher); vak5.setText(classs); lok5.setText(room);}
                        if (hour.contains("6")){
                            uur6.setText(hour); doc6.setText(teacher); vak6.setText(classs); lok6.setText(room);}
                        if (hour.contains("7")){
                            uur7.setText(hour); doc7.setText(teacher); vak7.setText(classs); lok7.setText(room);}
                        if (hour.contains("8")){
                            uur8.setText(hour); doc8.setText(teacher); vak8.setText(classs); lok8.setText(room);}
                        if (hour.contains("9")){
                            uur9.setText(hour); doc9.setText(teacher); vak9.setText(classs); lok9.setText(room);}
                        if (hour.contains("10")){
                            uur10.setText(hour); doc10.setText(teacher); vak10.setText(classs); lok10.setText(room);}
                        if (hour.contains("11")){
                            uur11.setText(hour); doc11.setText(teacher); vak11.setText(classs); lok11.setText(room);}
                        if (hour.contains("12")){
                            uur12.setText(hour); doc12.setText(teacher); vak12.setText(classs); lok12.setText(room);}
                        if (hour.contains("13")){
                            uur13.setText(hour); doc13.setText(teacher); vak13.setText(classs); lok13.setText(room);}
                    }}
            else if (theday == 3){
                if (day.contains("3")){
                    if (hour.contains("1") && !hour.contains("10") && !hour.contains("11") && !hour.contains("12") && !hour.contains("13") ){
                        uur1.setText(hour); doc1.setText(teacher); vak1.setText(classs); lok1.setText(room);}
                        if (hour.contains("2")&& !hour.contains("12")){
                            uur2.setText(hour); doc2.setText(teacher); vak2.setText(classs); lok2.setText(room);}
                        if (hour.contains("3")&& !hour.contains("13")){
                            uur3.setText(hour); doc3.setText(teacher); vak3.setText(classs); lok3.setText(room);}
                        if (hour.contains("4")){
                            uur4.setText(hour); doc4.setText(teacher); vak4.setText(classs); lok4.setText(room);}
                        if (hour.contains("5")){
                            uur5.setText(hour); doc5.setText(teacher); vak5.setText(classs); lok5.setText(room);}
                        if (hour.contains("6")){
                            uur6.setText(hour); doc6.setText(teacher); vak6.setText(classs); lok6.setText(room);}
                        if (hour.contains("7")){
                            uur7.setText(hour); doc7.setText(teacher); vak7.setText(classs); lok7.setText(room);}
                        if (hour.contains("8")){
                            uur8.setText(hour); doc8.setText(teacher); vak8.setText(classs); lok8.setText(room);}
                        if (hour.contains("9")){
                            uur9.setText(hour); doc9.setText(teacher); vak9.setText(classs); lok9.setText(room);}
                        if (hour.contains("10")){
                            uur10.setText(hour); doc10.setText(teacher); vak10.setText(classs); lok10.setText(room);}
                        if (hour.contains("11")){
                            uur11.setText(hour); doc11.setText(teacher); vak11.setText(classs); lok11.setText(room);}
                        if (hour.contains("12")){
                            uur12.setText(hour); doc12.setText(teacher); vak12.setText(classs); lok12.setText(room);}
                        if (hour.contains("13")){
                            uur13.setText(hour); doc13.setText(teacher); vak13.setText(classs); lok13.setText(room);}
                    }}
            else if (theday == 4){
                if (day.contains("4")){
                    if (hour.contains("1") && !hour.contains("10") && !hour.contains("11") && !hour.contains("12") && !hour.contains("13") ){
                        uur1.setText(hour); doc1.setText(teacher); vak1.setText(classs); lok1.setText(room);}
                        if (hour.contains("2")&& !hour.contains("12")){
                            uur2.setText(hour); doc2.setText(teacher); vak2.setText(classs); lok2.setText(room);}
                        if (hour.contains("3")&& !hour.contains("13")){
                            uur3.setText(hour); doc3.setText(teacher); vak3.setText(classs); lok3.setText(room);}
                        if (hour.contains("4")){
                            uur4.setText(hour); doc4.setText(teacher); vak4.setText(classs); lok4.setText(room);}
                        if (hour.contains("5")){
                            uur5.setText(hour); doc5.setText(teacher); vak5.setText(classs); lok5.setText(room);}
                        if (hour.contains("6")){
                            uur6.setText(hour); doc6.setText(teacher); vak6.setText(classs); lok6.setText(room);}
                        if (hour.contains("7")){
                            uur7.setText(hour); doc7.setText(teacher); vak7.setText(classs); lok7.setText(room);}
                        if (hour.contains("8")){
                            uur8.setText(hour); doc8.setText(teacher); vak8.setText(classs); lok8.setText(room);}
                        if (hour.contains("9")){
                            uur9.setText(hour); doc9.setText(teacher); vak9.setText(classs); lok9.setText(room);}
                        if (hour.contains("10")){
                            uur10.setText(hour); doc10.setText(teacher); vak10.setText(classs); lok10.setText(room);}
                        if (hour.contains("11")){
                            uur11.setText(hour); doc11.setText(teacher); vak11.setText(classs); lok11.setText(room);}
                        if (hour.contains("12")){
                            uur12.setText(hour); doc12.setText(teacher); vak12.setText(classs); lok12.setText(room);}
                        if (hour.contains("13")){
                            uur13.setText(hour); doc13.setText(teacher); vak13.setText(classs); lok13.setText(room);}
                    }}
            else if (theday == 5){
                if (day.contains("5")){
                    if (hour.contains("1") && !hour.contains("10") && !hour.contains("11") && !hour.contains("12") && !hour.contains("13") ){
                        uur1.setText(hour); doc1.setText(teacher); vak1.setText(classs); lok1.setText(room);}
                        if (hour.contains("2")&& !hour.contains("12")){
                            uur2.setText(hour); doc2.setText(teacher); vak2.setText(classs); lok2.setText(room);}
                        if (hour.contains("3")&& !hour.contains("13")){
                            uur3.setText(hour); doc3.setText(teacher); vak3.setText(classs); lok3.setText(room);}
                        if (hour.contains("4")){
                            uur4.setText(hour); doc4.setText(teacher); vak4.setText(classs); lok4.setText(room);}
                        if (hour.contains("5")){
                            uur5.setText(hour); doc5.setText(teacher); vak5.setText(classs); lok5.setText(room);}
                        if (hour.contains("6")){
                            uur6.setText(hour); doc6.setText(teacher); vak6.setText(classs); lok6.setText(room);}
                        if (hour.contains("7")){
                            uur7.setText(hour); doc7.setText(teacher); vak7.setText(classs); lok7.setText(room);}
                        if (hour.contains("8")){
                            uur8.setText(hour); doc8.setText(teacher); vak8.setText(classs); lok8.setText(room);}
                        if (hour.contains("9")){
                            uur9.setText(hour); doc9.setText(teacher); vak9.setText(classs); lok9.setText(room);}
                        if (hour.contains("10")){
                            uur10.setText(hour); doc10.setText(teacher); vak10.setText(classs); lok10.setText(room);}
                        if (hour.contains("11")){
                            uur11.setText(hour); doc11.setText(teacher); vak11.setText(classs); lok11.setText(room);}
                        if (hour.contains("12")){
                            uur12.setText(hour); doc12.setText(teacher); vak12.setText(classs); lok12.setText(room);}
                        if (hour.contains("13")){
                            uur13.setText(hour); doc13.setText(teacher); vak13.setText(classs); lok13.setText(room);}
                    }}

        }

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

I would start by creating a class "Session" which encapsulates the uurN, docN, vakN, and lokN fields as instance variables (also name those better). Then add a fill method to accept these four fields and fill out the instance variables.

public class Session {
    private final TextView hour;
    private final TextView teacher;
    private final TextView subject;
    private final TextView room;

    public Session(TextView hourTextView, TextView teacherTextView, TextView subjectTextView, TextView roomTextView) {
        this.hourTextView = hourTextView;
        this.teacherTextView = teacherTextView;
        this.subjectTextView = subjectTextView;
        this.roomTextView = roomTextView;
    }

    public void fill(String hour, String teacher, String subject, String room) {
        hourTextView.setText(hour);
        teacherTextView.setText(teacher);
        subjectTextView.setText(subject);
        roomTextView.setText(room);
    }
}

Then I would create a HashMap lets call it sessions, mapping the hour to the session object.

HashMap<Byte, Session> sessions = new HashMap<Byte, Session>();
sessions.add(1, new Session(uur1, doc1, vak1, lok1));
sessions.add(2, new Session(uur2, doc2, vak2, lok2)); //etc

Then you can just do something like:

sessions.get(hour).fill(hour, teacher, classs, room);

Also just use someString.equals("1") if you need to test equality rather than someString.contains("1") and then need to exclude all the other possibilities.

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