GithubHelp home page GithubHelp logo

repairlog's Introduction

RepairLog

Πρόκειται για μια Andoird εφαρμογή που υλοποιήθηκε στα πλαίσια εργασίας για το Μεταπτυχιακό μου.

Το αντικείμενο της εφαρμογής είναι να μπορεί χρήστης να καταχωρείτα οχήματα τα οποία έχει καθώς και τις επισκευές που έχει κάνει σε αυτά.

ΕΡΓΑΛΕΙΑ ΑΝΑΠΤΥΞΗΣ

Για την ανάπτυξη της εφαρμογής χρησιμοποιήθηκε Android Studio που είναι και το επίσημο εργαλείο ανάπτυξης που προτείνει και η Google για την ανάπτυξη εφαρμογών σε περιβάλλον Android.

ΠΑΡΟΥΣΙΑΣΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ

Το λογότυπο της εφαρμογής καθώς και το όνομά της όταν κάποιος την κάνει εγκατάσταση στη φορητή του συσκευή φαίνονται στη παρακάτω φωτογραφία.

enter image description here

Με το που την ανοίγει ο χρήστης την εφαρμογή τον μεταφέρει στην σελίδα να κάνει Google Sign In .

enter image description here

Και στη συνέχεια μόλις ολοκληρώσει το Google Sign In θα του εμφανίσει τις επιλογές να μεταβεί στην αρχική σελίδα της εφαρμογής

enter image description here

Εδώ βλέπουμε ότι του δίνεται και η δυνατότητα να κάνει κάνει και Google Sign Out καθώς και Disconnect.

Με το που πατήσει να μεταβεί ο χρήστης στην αρχική σελίδα γίνεται και ο συγχρονισμός των δεδομένων της εφαρμογής που βρίσκονται στην συσκευή του χρήστη με τα δεδομένα που είναι αποθηκευμένα στο cloud. enter image description here

Στη συνέχεια εμφανίζεται η αρχική σελίδα της εφαρμογής

enter image description here

Να σημειωθεί σε αυτό το σημείο ότι η εφαρμογή είναι δίγλωσση , και αναγνωρίσει αν ο χρήστης έχει επιλεγμένη γλώσσα στο κινητό του τα Αγγλικά ή τα Ελληνικά και του εμφανίζει αντίστοιχα την γλώσσα. Φυσικά ο χρήστης μπορεί να αλλάξει και αυτός την γλώσσα της εφαρμογής επιλέγοντας πάνω δεξιά τις

enter image description here

και στη συνέχεια επιλέγοντας της επιλογή

enter image description here

Αρχικά ο χρήστης, από την αρχική οθόνη, θα πρέπει να επιλέξει

enter image description here

ώστε να μπορέσει να προσθέσει κάποιο όχημα. Πατώντας την επιλογή αυτή θα πρέπει να επιλέξει αν θέλει να καταχωρήσει κάποιο αυτοκίνητο ή κάποια μηχανή

enter image description here

Έστω ότι θέλει να προσθέσει ένα αυτοκίνητο. Τότε θα του εμφανίσει να συμπληρώσει τα στοιχεία του οχήματος.

enter image description here

Έστω ότι θέλει να προσθέσει ένα αυτοκίνητο. Τότε θα του εμφανίσει να συμπληρώσει τα στοιχεία του οχήματος.

enter image description here

Θα πρέπει να επιλέξει πρώτα την χρονολογία, μετά τη μάρκα του αυτοκινήτου , στη συνέχεια το μοντέλο και τέλος τα κυβικά του αυτοκινήτου. Ακόμα προαιρετικά μπορεί ο χρήστης να βάλε και μια φωτογραφία του αυτοκινήτου του , ειδάλλως θα μπει μια προεπιλεγμένη φωτογραφία. Να σημειωθεί ότι τα δεδομένα των αυτοκινήτων δεν ορίζονται από την εφαρμογή αλλά από εξωτερικό Rest API . Οπότε αν κάποιες καταχωρήσεις λείπουν δεν είναι από δική μου υπαιτιότητα.
Στην παρακάτω εικόνα φαίνεται πώς θα είναι όταν θα έχει συμπληρώσει όλα τα στοιχεία.

enter image description here

Να σημειωθεί ότι η εφαρμογή δεν αφήνει τον χρήστη να αφήσει κάποια από τα πεδία κενά και τον προτρέπει να τα συμπληρώσει. Στη συνέχεια πρέπει να επιλέξει να αποθηκεύσει την καταχώρηση. Μετά την αποθήκευση ο χρήστης μεταφέρεται στην αρχική σελίδα της εφαρμογής. Επιλέγοντας την επιλογή να δει τα οχήματά του enter image description here

Επιλέγοντας πάνω σε κάποιο από αυτά βλέπει την λίστα με τις εργασίες που έχουν γίνει σε αυτό. enter image description here

Εκεί υπάρχουν και οι επιλογές άμα θέλει ο χρήστης να διαγράψει το όχημα ή να προσθέσει κάποια ακόμα επισκευή. Στην περίπτωση που θέλει να διαγράψει το όχημα θα ερωτηθεί άμα θέλει να διαγράψει και θα προχωρήσει στην διαγραφή του οχήματος. Στην περίπτωση που θέλει να προσθέσει μια νέα εργασία θα μεταβεί στην οθόνη της προσθήκης νέας εργασίας. Στην περίπτωση που θέλει να δει την επισκευή την επιλέγει και μπορεί να την δει ολόκληρη. enter image description here

Στην περίπτωση όπου θέλει ο χρήστης να διαγράψει μια εργασία θα πρέπει να πατήσει παρατεταμένα πάνω στην εργασία και τότε θα ερωτηθεί άμα θέλει να διαγράψει την συγκεκριμένη καταχώρηση. enter image description here

Η σελίδα εισαγωγής μιας νέας εργασίας είναι όπως παρακάτω. enter image description here

Θα πρέπει ο χρήστης να επιλέξει την ημερομηνία που έγινε η καταχώρηση , τα χιλιόμετρα του οχήματος καθώς και το κόστος και την περιγραφή της εργασίας. enter image description here

enter image description here

Και στο τέλος να αποθηκεύσει την καταχώρηση.

enter image description here

Η ίδια διαδικασία γίνεται αν θέλει ο χρήστης να κάνει εισαγωγή κάποια μηχανή απλά στην οθόνη που πρέπει να επιλέξει αν θέλει να δημιουργήσει μια εισαγωγή για αυτοκίνητο ή μηχανή πρέπει να επιλέξει τη μηχανή.

enter image description here

enter image description here

Μια διαφορά σε σχέση με το αμάξι είναι ότι ο χρήστης θα πρέπει να πληκτρολογήσει όλα τα πεδία για την καταχώρηση. Δεν βρήκα κάποιο αντίστοιχο REST API για της μηχανές. Aπό την αρχική οθόνη ο χρήστης μπορεί να δει την τοποθεσία του στο χάρτη , αφού έχει ενεργοποιήσει πριν το GPS της φορητής του συσκευής , πατώντας στην επιλογή

enter image description here

enter image description here

Τέλος για να μπορέσει ο χρήστης να βγει από την εφαρμογή αρκεί από την αρχική σελίδα να πατήσει το Back Button της φορητής του συσκευής όπου θα ερωτηθεί άμα θέλει να εξέλθει της εφαρμογής

enter image description here

ΣΗΜΕΙΑ ΙΔΙΑΙΤΕΡΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟΥ ΕΝΔΙΑΦΕΡΟΝΤΟΣ

ΑΠΟΘΗΚΕΥΣΗ ΤΩΝ ΔΕΔΟΜΕΝΩΝ

Για την αποθήκευση των δεδομένων έχει χρησιμοποιηθεί για βάση το Realm. Η βάση είναι τοπικά και μπορεί να λειτουργήσει και χωρίς τη χρήση του διαδικτύου. Αυτό όμως που έχει ιδιαίτερο ενδιαφέρων είναι ότι έχουμε υλοποιήσει συγχρονισμό των δεδομένων μας με τη χρήση του Realm Object Server.

enter image description here

Το σχήμα δείχνει ακριβώς πώς λειτουργεί ή όλη διαδικασία και είναι μια Real Time Database. Ο Realm Object Server που έχει στηθεί, βρίσκεται σε ένα VM στον Okeanos σε ένα Ubuntu 16.04 λειτουργικό σύστημα .

enter image description here

Το διαχειριστικό UI του Real Object Server φαίνεται όπως παρακάτω

enter image description here

Για την υλοποίηση αυτό χρειάζεται να δημιουργηθεί ένας χρήστης στον Realm Object Server. Αυτό γίνεται στον κώδικα αμέσως μετά το Google Sign Login του χρήστη . Αφού γίνει το Google Sign Login , χρησιμοποιούμε το Google email του χρήστη σας username και το Google Id για password και φτιάχνουμε τον χρήστη

private void handleSignInResult(GoogleSignInResult result) { 
    Log.d(TAG, "handleSignInResult:" + result.isSuccess()); 
    if (result.isSuccess()) { 
        // Signed in successfully, show authenticated UI. 
        acct = result.getSignInAccount(); 
        String username = ""; 
        String password = ""; 
        //Κάνουμε έναν έλεγχο άμα ο χρήστης έχει το συγκεκριμένο email να του το αλλάξουμε 
        // γιατί με το email αυτό είναι ο λογαρισμός του Database Administrator στο Realm Object Server 
        if (acct != null) { 
            if ("[email protected]".equals(acct.getEmail())) { 
                username = "[email protected]"; 
            } else { 
                //σαν username στο Realm βάζουμε το email του χρήστη απο το Google Sign In 
                username = acct.getEmail(); 
            } 
            //Σαν password στο Realm βάζουμε το google id 
            password = acct.getId(); 
        } 

        mStatusTextView.setText(getString(R.string.signed_in_fmt, acct.getDisplayName())); 
        Realm.init(getApplicationContext()); 
        //Αφού ο χρήστης κάνει google Sign In μετα φτιάχνουμε χρήστη στο Realm Object Server 
        SyncUser.loginAsync(SyncCredentials.usernamePassword(username, password, true), AUTH_URL, new SyncUser.Callback() { 
            @Override 
            public void onSuccess(SyncUser user) { 

                Toast.makeText(SignInActivity.this, "Create User in Realm Object Server", Toast.LENGTH_LONG).show(); 
            } 

            @Override 
            public void onError(ObjectServerError error) { 
                String errorMsg; 
                switch (error.getErrorCode()) { 
                    case EXISTING_ACCOUNT: 
                        errorMsg = "Account already exists"; 
                        break; 
                    default: 
                        errorMsg = error.toString(); 
                } 
            } 
        }); 
        updateUI(true); 

Στη συνέχεια όταν ο χρήστης πατήσει να πάει στην αρχική οθόνη κάνουμε login του χρηστη στον Realm Object Server. Σε αυτό το σημείο έχουμε βάλει μια χρονοκαθηστέρηση των 5 sec ώστε να προλάβει η βάση του Realm να συγχρονίσει με τον Realm Object Server.

public void gotoMain(View view) { 
showProgressDialog1(); 

//Κάνουμε Συγχρονισμό του Realm με τον Realm Object Server 
SyncRealm.realmSync(); 

//Καθηστερούμε την όλη διαδικασία για να προλαβει να κάνει συγχρονισμο το Realm 
Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 

    @Override 
    public void run() { 
        hideProgressDialog1(); 
        Intent ki = new Intent(SignInActivity.this, MainActivity.class); 
        startActivity(ki); 

    } 

}, 5000); // 5000ms delay

ΔΕΔΟΜΕΝΑ ΑΥΤΟΚΙΝΗΤΩΝ

Για να μπορέσει να συμπληρώσει ο χρήστης τα δεδομένα των αυτοκινήτων του χρησιμοποίησα ένα REST API που βρήκα στο διαδίκτυο και βρίσκεται στην παρακάτω διεύθυνση https://www.carqueryapi.com/
Για να μπορέσουμε να πάρουμε τα δεδομένα χρησιμοποιήσαμε το Retrofit για να μπορέσουμε να κάνουμε επικοινωνήσουμε με το API. Ενδεικτικά παραθέτω τον κώδικα όπου καλούμε και παίρνουμε τα δεδομένα από τις μάρκες των αυτοκινήτων.

CarService carService = retrofit.create(CarService.class);
carService.getMake("getMakes", year, "0").enqueue(new Callback<Make>() { 
@Override 
public void onResponse(Call<Make> call, Response<Make> response) { 
    if (response.isSuccessful()) { 
        makeList = response.body(); 
        makeListString1 = new ArrayList<String>(); 
        //Βάζουμε αυτό στην αρχή για να ξέρουμε αν έχει επιλέξει κάτι ο χρήστης ή όχι 
        if (!makeListString1.contains(".......")) { 
            makeListString1.add("......."); 
        } 
        //Γεμίζουμε τη list με τα makes 
        for (int i = 0; i < makeList.getMakes().size(); i++) { 
            makeListString1.add(makeList.getMakes().get(i).getMakeDisplay()); 
        } 
        //Καλούμε για να γεμίσουμε τις makes 
        fillListMakes(); 
        hideProgressDialog(); 
    } else { 
        Log.e(TAG, "Failed. Status: " + response.code()); 
        Log.i(TAG, "-------->" + call.request().url()); 
    } 
}  

ΔΟΚΙΜΕΣ ΕΦΑΡΜΟΓΗΣ

Η εφαρμογή δόθηκε για δοκιμή σε άλλους προγραμματιστές αλλά και σε απλούς χρήστες οι οποίοι μας επισήμαναν διάφορα λειτουργικά προβλήματα καθώς και λεκτικά σφάλματα που είχα. Ακόμα διαπιστώθηκαν διάφορες δυσλειτουργίες που είχε η εφαρμογή σε διαφορετικές συσκευές. Τα σφάλματα που προέκυπταν έρχονται και στο crash report του Firebase
enter image description here

repairlog's People

Contributors

tsotzolas avatar

Watchers

 avatar  avatar

Forkers

spiroskleft

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.