16 public S t r i n g t o S t r i n g ( ) 17 { 18 return brand+" : "+name+" : "+c o s t ; 19 } 20 } 8 { 10 }

Σχετικά έγγραφα
7 f i n a l S t r i n g mytelephone=" " ; 8 10 {

άσκηση Hide UI Elements 7.2 Try and Catch

2 using namespace s t d ; 4 { 12 int t= x ; 6 x=y ; 7 y=t ; 8 } 9 11 { 13 x= y ; 14 y=t ; 15 } {

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Αρχεία και Ρεύματα. Αρχεία

ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

Αντικειµενοστρεφής Προγραµµατισµός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Εισαγωγικές έννοιες. Ιωάννης Γ. Τσούλος 2014

Αντικειμενοστρεφής Προγραμματισμός

ΠΑΡΑΡΤΗΜΑ ΓΡΕΒΕΝΩΝ ΤΜΗΜΑ ΕΠΙΧΕΙΡΗΣΙΑΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

Αντικειµενοστραφής Προγραµµατισµός

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD

Εφαρμογή Υπολογισμού Φιλοδωρήματος : προσθήκη λειτουργικότητας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Generics και ArrayLists

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Προγραμματισμός Διαδικτύου

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Προγραμματισμός ΙΙ (Java) 4. Διαχείριση εξαιρέσεων

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 7 : ΣΥΝΘΕΤΕΣ ΚΛΑΣΕΙΣ ΚΑΙ ΜΕΘΟΔΟΙ

ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

Η λέξη κλειδί this. Γαβαλάς Δαμιανός

ΕΞΑΙΡΕΣΕΙΣ. Εξαιρέσεις προκαλούνται. από το σύστηµα. από το πρόγραµµα

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

Διδάσκων: Παναγιώτης Ανδρέου

Προγραμματισμός Ι. Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Μάθημα 1 [3/11/2015].

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 12: Ροές και είσοδος/έξοδος αρχείων

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

ΠΡΟΤΥΠΑ. ΠΑΡΑ ΕΙΓΜΑ ηµιουργία πρότυπου στοίβας (stack) και στη συνέχεια δηµιουργία µιας στοίβας σηµείων.

ΚΛΑΣΕΙΣ ΜΕΘΟΔΟΙ - ΑΝΤΙΚΕΙΜΕΝΑ

Βασικά της γλώσσας JAVA

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες

4 Συλλογές Αντικειμένων

ANDROID Προγραμματισμός Εφαρμογών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

Σχεδιασµός, Εµφάνιση και Υφος

ιαδικτυακές Εφαρµογές Πραγµατικού Χρόνου µε Java

Σι θα δούμε σε αυτό το μάθημα;

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων

Μάθημα 2 [10/11/2015]

Κλάσεις και Αντικείµενα

Περιγραφή της εργασίας

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 10/1/08

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Εξαιρέσεις (Exceptions) Λάθη (Errors) Χειρισμός των Εξαιρέσεων (Exception Handling) Assertions

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

Αντικειμενοστραφής Προγραμματισμός

Ανάλυση άσκησης. Employee. SalariedEmployee CommissionEmployee HourlyEmployee. BasePlusCommissionEmployee

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

Ask1, Ask2, Ask3. private void jbutton1actionperformed(java.awt.event.actionevent evt) { jlabel1.settext( "You pressed the 1st button" ); }

ΜΑΘΗΜΑ 10 Ο ΟΡΓΑΝΩΣΗ ΤΗΣ Β ΓΙΑ ΧΡΗΣΤΕΣ (NON-EXPERTS) Α. ΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ ΕΠΙΛΟΓΩΝ 1. TOOLS DATA UTILITIES SWITCHBOARD MANAGER YES

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις

Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Δομές Δεδομένων - Εργαστήριο 2. Λίστες

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Χρήση Δομών String processing Στατικές μέθοδοι και μεταβλητές

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 1/4/2008

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

NetBeans και σχετικά προγράμματα. Κακαρόντζας Γεώργιος Κέντρο Αριστείας Ανοιχτού Λογισμικού ΑΠΘ 1ο Θερινό Σχολείο Κώδικα

Διδάσκων: Παναγιώτης Ανδρέου

11β Δομικά πρότυπα σχεδίασης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες Μέθοδοι tostring και equals Αντικείμενα μέσα σε αντικείμενα

ΜΑΘΗΜΑ Άνοιγμα Της Εφαρμογής Επεξεργασίας Κειμένου. 2. Κύρια Οθόνη Της Εφαρμογής Κειμένου ΣΤΟΧΟΙ:

Transcript:

1 Βάσ εις δεδομένων - Αρχεία Σε αυτήν την ενότητα θα εξετάσ ουμε τον τρόπο με τον οποίο σ υνδέεται το android με βάσ εις δεδομένων και πιο σ υγκεκριμένα με Sqlite βάσ εις. 1.1 Παραδείγματα ArrayList Επειδή θα ασ χοληθούμε αναλυτικά με βάσ εις δεδομένων που απαιτούν χρήσ η ArrayList θα παρουσ ιάσ τει ένα αναλυτικό παράδειγμα αποθήκευσ ης αυτοκινήτων. Η κατηγορία Car έχει ως ακολούθως: 1 package t e i e p ; 3 public class Car { 4 private S t r i n g name ; 5 private S t r i n g brand ; 6 private double c o s t ; 7 public Car ( S t r i n g n, S t r i n g b, double c ) 8 { 9 name=n ; 10 brand=b ; 11 c o s t=c ; 1 } 13 S t r i n g getname ( ) { return name ; } 14 S t r i n g getbrand ( ) { return brand ; } 15 double g e t c o s t ( ) { return c o s t ; } 16 public S t r i n g t o S t r i n g ( ) 17 { 18 return brand+" : "+name+" : "+c o s t ; 19 } 0 } Για την αποθήκευσ η αντικειμένων της κατηγορίας χρησ ιμοποιείται ArrayList όπως και σ την επόμενη κατηγορία: 1 package t e i e p ; 3 import java. u t i l. ArrayList ; 4 5 public class CarList { 6 private ArrayList<Car> mycars ; 7 public CarList ( ) 8 { 9 mycars=new ArrayList<Car >(); 10 } 11 public void addcar ( S t r i n g n, S t r i n g b, double c ) 1 { 13 Car mycar=new Car (n, b, c ) ; 1

14 mycars. add ( mycar ) ; 15 } 16 public Car g e t c a r ( int p o s i t i o n ) 17 { 18 i f ( p o s i t i o n <0 p o s i t i o n >=mycars. s i z e ( ) ) 19 return null ; 0 return mycars. get ( p o s i t i o n ) ; 1 } 3 public void updatecar ( int pos, 4 S t r i n g n, S t r i n g b, double c ) 5 { 6 Car mycar=new Car (n, b, c ) ; 7 mycars. s e t ( pos, mycar ) ; 8 } 9 30 public void removecar ( int pos ) 31 { 3 i f ( pos<0 pos>=mycars. s i z e ( ) ) return ; 33 mycars. remove ( pos ) ; 34 } 35 36 public int t o t a l c a r s ( ) 37 { 38 return mycars. s i z e ( ) ; 39 } 40 } Τέλος για την διαχείρισ η της ArrayList χρησ ιμοποιείται το επόμενο πρόγραμμα: 1 package t e i e p ; import javax. swing. ; 3 public class Main { 4 public s t a t i c void main ( S t r i n g [ ] args ) { 5 CarList c l i s t=new CarList ( ) ; 6 int c h o i c e ; 7 do 8 { 9 System. out. p r i n t l n ( "1 I n s e r t new car " ) ; 10 System. out. p r i n t l n ( " Display c a r s " ) ; 11 System. out. p r i n t l n ( "3 Change car " ) ; 1 System. out. p r i n t l n ( "4 Remove car " ) ; 13 System. out. p r i n t l n ( "5 Exit " ) ; 14 c h o i c e=i n t e g e r. p a r s e I n t ( 15 JOptionPane. showinputdialog ( " Enter c h o i c e " ) ) ; 16 i f ( c h o i c e==1) 17 {

18 S t r i n g name, brand ; 19 double c o s t ; 0 name=joptionpane. showinputdialog ( " Enter name" ) ; 1 brand=joptionpane. showinputdialog ( " Enter brand" ) ; c o s t=double. parsedouble ( 3 JOptionPane. showinputdialog ( " Enter c o s t " ) ) ; 4 c l i s t. addcar (name, name, c o s t ) ; 5 } 6 else 7 i f ( c h o i c e==) 8 { 9 int i ; 30 for ( i =0; i<c l i s t. t o t a l c a r s ( ) ; i++) 31 { 3 Car c=c l i s t. g e t c a r ( i ) ; 33 System. out. p r i n t l n ( "Car at "+i+" i s "+c ) ; 34 } 35 } 36 else 37 i f ( c h o i c e==3) 38 { 39 S t r i n g name, brand ; 40 double c o s t ; 41 int pos ; 4 name=joptionpane. showinputdialog ( " Enter name" ) ; 43 brand=joptionpane. showinputdialog ( " Enter brand" ) ; 44 c o s t=double. parsedouble ( 45 JOptionPane. showinputdialog ( " Enter c o s t " ) ) ; 46 pos=i n t e g e r. p a r s e I n t ( 47 JOptionPane. showinputdialog ( " Enter p o s i t i o n " ) ) ; 48 c l i s t. updatecar ( pos, name, name, c o s t ) ; 49 } 50 else 51 i f ( c h o i c e==4) 5 { 53 int pos ; 54 pos=i n t e g e r. p a r s e I n t ( 55 JOptionPane. showinputdialog ( " Enter p o s i t i o n " ) ) ; 56 c l i s t. removecar ( pos ) ; 57 } 58 }while ( c h o i c e! = 5 ) ; 59 } 60 } 3

1. Δημιουργία βάσης δεδομένων Για να υπάρξει σ ύνδεσ η με βάσ εις δεδομένων χρειάζεται να επεκτείνουμε την κατηγορία SQLiteOpenHelper. Καταρχήν θα πρέπει να δώσ ουμε την επόμενη άδεια σ το AndroidManifest.xml <uses permission android:name=" android. permission.write_external_storage" /> καθώς θα πρέπει να αποθηκευτεί η ΒΔ σ ε ξεχωρισ τό αρχείο. Στην σ υνέχεια δημιουργούμε την επόμενη κατηγορία 1 public c l a s s Database extends SQLiteOpenHelper{ 3 private S t r i n g databasename=null ; 4 private S t r i n g tablename=" c a r s " ; 5 private SQLiteDatabase database=null ; 6 private Context mcontext=null ; 7 8 public Database ( Context context, S t r i n g name, 9 CursorFactory factory, int v e r s i o n ) { 10 super ( context, name, factory, v e r s i o n ) ; 11 databasename=name ; 1 mcontext=context ; 13 database=this. getwritabledatabase ( ) ; 14 } 15 16 @Override 17 public void oncreate ( SQLiteDatabase db ) { 18 db. execsql ( " c r e a t e t a b l e "+tablename+ 19 " (name text, brand text, c o s t double ) " ) ; 0 Log. d( "TEST", " Database Created " ) ; 1 } 3 @Override 4 public void onupgrade ( SQLiteDatabase db, 5 int oldversion, int newversion ) 6 { 7 Log. d( "TEST", " Database New Version : "+newversion ) ; 8 db. execsql ( " drop t a b l e i f e x i s t s "+tablename ) ; 9 oncreate ( db ) ; 30 } 31 } Σε αυτήν την κατηγορία θα πρέπει να παρατηρήσ ουμε τα ακόλουθα: 1. Στην μέθοδο δημιουργίας τα δύο βασ ικά σ τοιχεία είναι το όνομα της ΒΔ και η έκδοσ ή της (παράμετροι name και version). Το όνομα της ΒΔ σ υνήθως είναι με κατάληξη.db σ το τέλος. 4

. Η έκδοσ η μπορεί να είναι ένας ακέραιος αριθμός, ο οποίος σ υνήθως ξεκινά από 1. 3. Αν η ΒΔ δεν υπάρχει, τότε με την γραμμή database=this.getwritabledatabase(); καλείται η μέθοδος oncreate() η οποία και θα αναλάβει την δημιουργία των πινάκων. 4. Αν η ΒΔ υπάρχει και ο αριθμός έκδοσ ης είναι μεγαλύτερος από τον προηγούμενο καλείται η μέθοδος onupgrade Η επόμενη κατηγορία χρησ ιμοποιείται για την επικοινωνία με την ΒΔ 1 public class MainActivity extends A c t i v i t y { 3 LinearLayout mainlayout=null ; 4 int dbversion =1; 5 S t r i n g dbname=" c a r s. db" ; 6 Button createdb=null ; 7 Database mydb=null ; 8 9 @Override 10 protected void oncreate ( Bundle s a v e d I n s t a n c e S t a t e ) { 11 super. oncreate ( s a v e d I n s t a n c e S t a t e ) ; 1 mainlayout=new LinearLayout ( this ) ; 13 setcontentview ( mainlayout ) ; 14 mydb=new Database ( this, dbname, null, dbversion ) ; 15 createdb=new Button ( this ) ; 16 createdb. settext ( "CREATE DATABASE" ) ; 17 mainlayout. addview ( createdb ) ; 18 createdb. s e t O n C l i c k L i s t e n e r (new OnClickListener ( ) 19 { 0 1 @Override public void onclick ( View v ) { 3 mydb. c l o s e ( ) ; 4 ++dbversion ; 5 mydb=new Database ( MainActivity. this, 6 dbname, null, dbversion ) ; 7 8 } 9 30 } ) ; 31 } 3 } Στην εφαρμογή αυτή κάθε φορά που ο χρήσ της πατάει το πλήκτρο πίεσ ης η ΒΔ δημιουργείται και πάλι, αφού αυξάνει ο αριθμός έκδοσ ης. 5

1.3 Εισαγωγή δεδομένων -Εμφάνιση δεδομένων Στην σ υνέχεια παρουσ ιάζεται τροποποιημένη η κατηγορία Database με μεθόδους για εισ αγωγή και επισ τροφή των δεδομένων του πίνακα. 1 public c l a s s Database extends SQLiteOpenHelper{ 3 private S t r i n g databasename=null ; 4 private S t r i n g tablename=" c a r s " ; 5 private SQLiteDatabase database=null ; 6 private Context mcontext=null ; 7 8 public Database ( Context context, S t r i n g name, 9 CursorFactory factory, int v e r s i o n ) { 10 super ( context, name, factory, v e r s i o n ) ; 11 databasename=name ; 1 mcontext=context ; 13 database=this. getwritabledatabase ( ) ; 14 } 15 16 @Override 17 public void oncreate ( SQLiteDatabase db ) { 18 db. execsql ( " c r e a t e t a b l e "+tablename+ 19 " (name text, brand text, c o s t double ) " ) ; 0 Log. d( "TEST", " Database Created " ) ; 1 } 3 @Override 4 public void onupgrade ( SQLiteDatabase db, 5 int oldversion, int newversion ) 6 { 7 Log. d( "TEST", " Database New Version : "+newversion ) ; 8 db. execsql ( " drop t a b l e i f e x i s t s "+tablename ) ; 9 oncreate ( db ) ; 30 } 31 3 public ArrayList<String > g e t R e s u l t s ( ) 33 { 34 ArrayList<String > x=new ArrayList<String >(); 35 Cursor c u r s o r = database. rawquery ( 36 " s e l e c t from "+tablename, null ) ; 37 i f ( c u r s o r. getcount ()==0) 38 { 39 c u r s o r. c l o s e ( ) ; 40 return x ; 41 } 4 int nameindex, brandindex, c o s t i n d e x ; 6

43 nameindex=c u r s o r. getcolumnindex ( "name" ) ; 44 brandindex=c u r s o r. getcolumnindex ( "brand" ) ; 45 c o s t i n d e x=c u r s o r. getcolumnindex ( " c o s t " ) ; 46 i f ( c u r s o r. movetofirst ( ) ) { 47 do{ 48 x. add ( c u r s o r. g e t S t r i n g ( nameindex)+ 49 " : "+c u r s o r. g e t S t r i n g ( brandindex)+" : "+ 50 c u r s o r. g e t S t r i n g ( c o s t i n d e x ) ) ; 51 }while ( c u r s o r. movetonext ( ) ) ; 5 } 53 return x ; 54 } 55 56 public void i n sertrecord ( S t r i n g name, S t r i n g brand, double c o s t ) 57 { 58 S t r i n g query=" i n s e r t i n t o "+ 59 tablename+" (name, brand, c o s t ) v alues ( ' "+ 60 name+" ', ' "+brand+" ', "+c o s t+" ) " ; 61 database. execsql ( query ) ; 6 } 63 } Για την εισ αγωγή δεδομένων σ την ΒΔ χρησ ιμοποιείται η μέθοδος execsql(). Για την επισ τροφή δεδομένων από την ΒΔ πρέπει να χρησ ιμοποιηθεί η τεχνική των cursors όπως παρουσ ιάζεται σ την μέθοδο getresults(). Η κατηγορία mainactivity αλλάζει ως ακολούθως: 1 public class MainActivity extends A c t i v i t y { 3 LinearLayout mainlayout=null ; 4 int dbversion =1; 5 S t r i n g dbname=" c a r s. db" ; 6 Button createdb=null ; 7 Database mydb=null ; 8 EditText name=null, brand=null, c o s t=null ; 9 LinearLayout buttonlayout=null ; 10 Button addbutton=null, showbutton=null ; 11 ListView l i s t=null ; 1 ArrayAdapter<String > adapter=null ; 13 14 public void makeinputs ( ) 15 { 16 name=new EditText ( this ) ; 17 name. sethint ( "Car name" ) ; 18 mainlayout. addview (name ) ; 19 brand=new EditText ( this ) ; 0 brand. sethint ( "Car brand" ) ; 7

1 mainlayout. addview ( brand ) ; c o s t=new EditText ( this ) ; 3 c o s t. sethint ( "Car c o s t " ) ; 4 mainlayout. addview ( c o s t ) ; 5 } 6 public void makelist ( ) 7 { 8 Display d i s p l a y = getwindowmanager ( ). g e t D e f a u l t D i s p l a y ( ) ; 9 int height = d i s p l a y. getheight ( ) ; 30 l i s t=new ListView ( this ) ; 31 mainlayout. addview ( l i s t ) ; 3 LinearLayout. LayoutParams lparams= 33 ( LinearLayout. LayoutParams ) l i s t. getlayoutparams ( ) ; 34 lparams. height=height / 3 ; 35 l i s t. setlayoutparams ( lparams ) ; 36 } 37 38 public void updatelist ( ) 39 { 40 ArrayList<String > x=new ArrayList<String >(); 41 x=mydb. g e t R e s u l t s ( ) ; 4 ArrayAdapter<String > adapter=new ArrayAdapter<String >( 43 this, android.r. layout. simple_list_item_1, x ) ; 44 l i s t. setadapter ( adapter ) ; 45 l i s t. i n v a l i d a t e ( ) ; 46 } 47 48 public void makebuttons ( ) 49 { 50 buttonlayout=new LinearLayout ( t h i s ) ; 51 mainlayout. addview ( buttonlayout ) ; 5 addbutton=new Button ( this ) ; 53 addbutton. settext ( "ADD CAR" ) ; 54 buttonlayout. addview ( addbutton ) ; 55 showbutton=new Button ( this ) ; 56 showbutton. settext ( "SHOW CARS" ) ; 57 buttonlayout. addview ( showbutton ) ; 58 addbutton. s e t O n C l i c k L i s t e n e r (new OnClickListener ( ) 59 { 60 61 @Override 6 public void onclick ( View arg0 ) { 63 mydb. i n s ertrecord (name. gettext ( ). t o S t r i n g ( ), 64 brand. gettext ( ). t o S t r i n g ( ), 65 Double. parsedouble ( 66 c o s t. gettext ( ). t o S t r i n g ( ) ) ) ; 8

67 } 68 69 } ) ; 70 71 showbutton. s e t O n C l i c k L i s t e n e r (new OnClickListener ( ) 7 { 73 74 @Override 75 public void onclick ( View arg0 ) { 76 updatelist ( ) ; 77 } 78 79 } ) ; 80 } 81 8 @Override 83 protected void oncreate ( Bundle s a v e d I n s t a n c e S t a t e ) { 84 super. oncreate ( s a v e d I n s t a n c e S t a t e ) ; 85 mainlayout=new LinearLayout ( this ) ; 86 setcontentview ( mainlayout ) ; 87 mainlayout. s e t O r i e n t a t i o n ( LinearLayout.VERTICAL) ; 88 mydb=new Database ( this, dbname, null, dbversion ) ; 89 makeinputs ( ) ; 90 makelist ( ) ; 91 makebuttons ( ) ; 9 } 93 } Προφανώς κάποιος αν θέλει να εκτελέσ ει οποιοδήποτε ερώτημα σ ε Sqlite ΒΔ μπορεί να χρησ ιμοποιήσ ει την μέθοδο execsql 1.4 Αρχεία στην κάρτα μνήμης Το επόμενο θέμα που θα εξετάσ ουμε είναι η πρόσ βασ η σ ε αρχεία σ την κάρτα μνήμης του κινητού. Και σ ε αυτήν την περίπτωσ η θα πρέπει να υπάρχει η επόμενη άδεια σ το αρχείο AndroidManifest.xml <uses permission android:name=" android. permission.write_external_storage" /> Στο επόμενο παράδειγμα παρουσ ιάζεται η διαχείρισ η αρχείων κειμένου για τον υπολογισ μό απλών αριθμητικών πράξεων σ ε πίνακες όπως μέσ ος όρος, ελάχισ το και μέγισ το. 1 public class MainActivity extends A c t i v i t y { 3 LinearLayout mainlayout=null ; 4 Button c r e a t e F i l e=null ; 5 Button openfile=null ; 9

6 ArrayList<Double> data=null ; 7 ListView l i s t=null ; 8 TextView r e s u l t=null ; 9 LinearLayout buttonlayout=null ; 10 11 public double average ( ) 1 { 13 i f ( data==null ) 14 return 0. 0 ; 15 double mesos =0.0; 16 int i ; 17 for ( i =0; i<data. s i z e ( ) ; i++) 18 mesos=mesos+data. get ( i ) ; 19 return mesos/ data. s i z e ( ) ; 0 } 1 public double min ( ) 3 { 4 i f ( data==null ) return 0. 0 ; 5 double x=data. get ( 0 ) ; 6 int i ; 7 for ( i =0; i<data. s i z e ( ) ; i++) 8 i f ( data. get ( i )<x ) 9 x=data. get ( i ) ; 30 return x ; 31 } 3 33 public double max( ) 34 { 35 i f ( data==null ) return 0. 0 ; 36 double x=data. get ( 0 ) ; 37 int i ; 38 for ( i =0; i<data. s i z e ( ) ; i++) 39 i f ( data. get ( i )>x ) 40 x=data. get ( i ) ; 41 return x ; 4 } 43 44 public void makelist ( ) 45 { 46 Display d i s p l a y = getwindowmanager ( ). g e t D e f a u l t D i s p l a y ( ) ; 47 int height = d i s p l a y. getheight ( ) ; 48 TextView header=new TextView ( this ) ; 49 header. settext ( "PLEASE MAKE A SELECTION" ) ; 50 header. s etback groun dcolor ( Color.GRAY) ; 51 header. setgravity ( Gravity.CENTER) ; 10

5 mainlayout. addview ( header ) ; 53 l i s t=new ListView ( this ) ; 54 mainlayout. addview ( l i s t ) ; 55 LinearLayout. LayoutParams lparams= 56 ( LinearLayout. LayoutParams ) l i s t. getlayoutparams ( ) ; 57 lparams. height=height / 3 ; 58 l i s t. setlayoutparams ( lparams ) ; 59 ArrayList<String > c=new ArrayList<String >(); 60 c. add ( "AVERAGE" ) ; 61 c. add ( "MIN" ) ; 6 c. add ( "MAX" ) ; 63 ArrayAdapter<String > adapter=new ArrayAdapter<String >( this, 64 android.r. layout. simple_list_item_1, c ) ; 65 l i s t. setadapter ( adapter ) ; 66 l i s t. setonitemclicklistener (new OnItemClickListener ( ) 67 { 68 69 @Override 70 public void onitemclick ( AdapterView<?> parent, 71 View view, int p o s i t i o n, long id ) { 7 i f ( p o s i t i o n ==0) 73 { 74 r e s u l t. settext ( " Average : "+average ( ) ) ; 75 } 76 else 77 i f ( p o s i t i o n ==1) 78 { 79 r e s u l t. settext ( "Min : "+min ( ) ) ; 80 } 81 else 8 i f ( p o s i t i o n ==) 83 { 84 r e s u l t. settext ( "Max: "+max ( ) ) ; 85 } 86 } 87 88 } ) ; 89 } 90 91 public void makebuttons ( ) 9 { 93 buttonlayout=new LinearLayout ( t h i s ) ; 94 mainlayout. addview ( buttonlayout ) ; 95 c r e a t e F i l e=new Button ( this ) ; 96 c r e a t e F i l e. settext ( "CREATE FILE" ) ; 97 buttonlayout. addview ( c r e a t e F i l e ) ; 11

98 openfile=new Button ( this ) ; 99 openfile. settext ( "OPEN FILE" ) ; 100 buttonlayout. addview ( openfile ) ; 101 c r e a t e F i l e. s e t O n C l i c k L i s t e n e r (new OnClickListener ( ) 10 { 103 104 @Override 105 public void onclick ( View v ) { 106 AlertDialog. Builder a l e r t = new 107 AlertDialog. Builder ( MainActivity. this ) ; 108 a l e r t. s e t T i t l e ( " Create FILE" ) ; 109 a l e r t. setmessage ( " S p e c i f y f i l e name : " ) ; 110 f i n a l EditText input = new EditText ( MainActivity. this ) ; 111 a l e r t. setview ( input ) ; 11 a l e r t. s e t P o s i t i v e B u t t o n ( "Ok", 113 new D i a l o g I n t e r f a c e. OnClickListener ( ) 114 { 115 public void onclick ( D i a l o g I n t e r f a c e dialog, int whichbutton ) { 116 S t r i n g value = input. gettext ( ). t o S t r i n g ( ) ; 117 Random K=new Random ( ) ; 118 int N=1+Math. abs (K. nextint ()%0); 119 // Gia na min f t i a x e i p o l y megalous p i n a k e s 10 int i ; 11 data=new ArrayList<Double >(); 1 for ( i =0; i<n; i++) 13 data. add (K. nextdouble ( ) 0 ) ; 14 F i l e m y f i l e=new F i l e ( 15 Environment. g e t E x t e r n a l S t o r a g e D i r e c t o r y ( ), value ) ; 16 try { 17 Writer out = new BufferedWriter (new OutputStreamWriter ( 18 new FileOutputStream ( m y f i l e ), "UTF8" ) ) ; 19 S t r i n g l i n e=n+"\n" ; 130 out. append ( l i n e ) ; 131 for ( i =0; i<n; i++) 13 { 133 l i n e=data. get ( i )+"\n" ; 134 out. append ( l i n e ) ; 135 } 136 out. f l u s h ( ) ; 137 out. c l o s e ( ) ; 138 } catch ( Exception e ) 139 { 140 Log. d( "TEST", "Problem in f i l e "+e. getmessage ( ) ) ; 141 } 14 } 143 } ) ; 1

144 a l e r t. setnegativebutton ( " Cancel ", new 145 D i a l o g I n t e r f a c e. OnClickListener ( ) { 146 public void onclick ( D i a l o g I n t e r f a c e dialog, int whichbutton ) 147 { 148 } 149 } ) ; 150 151 a l e r t. show ( ) ; 15 } 153 } ) ; 154 openfile. s e t O n C l i c k L i s t e n e r (new OnClickListener ( ) 155 { 156 157 @Override 158 public void onclick ( View v ) { 159 AlertDialog. Builder a l e r t = new 160 AlertDialog. Builder ( MainActivity. this ) ; 161 16 a l e r t. s e t T i t l e ( "Open FILE" ) ; 163 a l e r t. setmessage ( " S p e c i f y f i l e name : " ) ; 164 165 f i n a l EditText input = new EditText ( MainActivity. this ) ; 166 a l e r t. setview ( input ) ; 167 168 a l e r t. s e t P o s i t i v e B u t t o n ( "Ok", new 169 D i a l o g I n t e r f a c e. OnClickListener ( ) { 170 public void onclick ( D i a l o g I n t e r f a c e dialog, int whichbutton ) 171 { 17 S t r i n g value = input. gettext ( ). t o S t r i n g ( ) ; 173 F i l e f i l e =new F i l e ( 174 Environment. g e t E x t e r n a l S t o r a g e D i r e c t o r y ( ), value ) ; 175 176 try { 177 BufferedReader br = new BufferedReader ( 178 new InputStreamReader ( new 179 FileInputStream ( f i l e ), " u t f 8 " ), 6 5 5 3 6 ) ; 180 S t r i n g l i n e="" ; 181 l i n e=br. readline ( ) ; 18 data=new ArrayList<Double >(); 183 int i ; 184 int N=I n t e g e r. p a r s e I n t ( l i n e ) ; 185 for ( i =0; i<n; i++) 186 { 187 l i n e=br. readline ( ) ; 188 double x=double. parsedouble ( l i n e ) ; 189 data. add ( x ) ; 13

190 } 191 } catch ( Exception e ) { 19 Log. d( "TEST", "Problem in f i l e "+e. getmessage ( ) ) ; 193 } 194 195 } 196 197 } ) ; 198 a l e r t. setnegativebutton ( " Cancel ", new 199 D i a l o g I n t e r f a c e. OnClickListener ( ) { 00 public void onclick ( D i a l o g I n t e r f a c e dialog, int whichbutton ) 01 { 0 } 03 } ) ; 04 05 a l e r t. show ( ) ; 06 } } ) ; 07 } 08 09 public void makeresult ( ) 10 { 11 r e s u l t=new TextView ( this ) ; 1 mainlayout. addview ( r e s u l t ) ; 13 r e s u l t. setbackgroundcolor ( Color.GREEN) ; 14 r e s u l t. settext ( "RESULT: " ) ; 15 } 16 17 @Override 18 protected void oncreate ( Bundle s a v e d I n s t a n c e S t a t e ) { 19 super. oncreate ( s a v e d I n s t a n c e S t a t e ) ; 0 mainlayout=new LinearLayout ( t h i s ) ; 1 setcontentview ( mainlayout ) ; mainlayout. s e t O r i e n t a t i o n ( LinearLayout.VERTICAL) ; 3 makelist ( ) ; 4 makebuttons ( ) ; 5 makeresult ( ) ; 6 } 7 } 1.5 Αρχεία στο Assets Ολες οι εφαρμογές android διαθέτουν και ένα βοηθητικό φάκελο με το όνομα assets Σε αυτόν τοποθετούνται αρχεία τα οποία είναι μικρά σ ε μέγεθος (<1ΜΒ) και τα οποία είναι μόνον προς ανάγνωσ η. Για να τοποθετήσ ουμε ένα αρχείο σ ε αυτόν τον φάκελο δίνουμε δεξί κλικ σ ε αυτόν και επιλέγουμε Import. Στο επόμενο 14

παράδειγμα τοποθετούμε σ τον φάκελο assets τρεις μικρές εικόνες. Ο χρήσ της διαλέγει από ένα ListView μια εικόνα και αυτή εμφανίζεται σ ε ένα ImageView. 1 public class MainActivity extends A c t i v i t y { 3 LinearLayout mainlayout=null ; 4 ListView l i s t=null ; 5 ArrayAdapter<String > adapter=null ; 6 ImageView image=null ; 7 8 @Override 9 protected void oncreate ( Bundle s a v e d I n s t a n c e S t a t e ) { 10 super. oncreate ( s a v e d I n s t a n c e S t a t e ) ; 11 mainlayout=new LinearLayout ( this ) ; 1 setcontentview ( mainlayout ) ; 13 mainlayout. s e t O r i e n t a t i o n ( LinearLayout.VERTICAL) ; 14 l i s t=new ListView ( this ) ; 15 mainlayout. addview ( l i s t ) ; 16 ArrayList<String >x =new ArrayList<String >(); 17 f i n a l AssetManager assetmanager = g e t A s s e t s ( ) ; 18 try { 19 S t r i n g [ ] f i l e s = assetmanager. l i s t ( " Images " ) ; 0 //mesa s t i n parametro t i s l i s t bazoume 1 // ton f a k e l o, an y p a r x e i k a p o i o s int i ; 3 for ( i =0; i<f i l e s. length ; i++) 4 x. add ( f i l e s [ i ] ) ; 5 adapter=new ArrayAdapter<String >( this, 6 android.r. layout. simple_list_item_1, x ) ; 7 l i s t. setadapter ( adapter ) ; 8 } catch ( Exception e1 ) { 9 Log. d( "TEST", "EXCEPTION "+e1. getmessage ( ) ) ; 30 e1. printstacktrace ( ) ; 31 } 3 l i s t. setonitemclicklistener (new OnItemClickListener ( ) 33 { 34 35 @Override 36 public void onitemclick ( AdapterView<?> parent, View view, 37 int p o s i t i o n, long id ) { 38 InputStream ims ; 39 try 40 { 41 ims = assetmanager. open ( 4 " Images /"+adapter. getitem ( p o s i t i o n ) ) ; 43 Drawable d = Drawable. createfromstream ( ims, null ) ; 15

44 image. setimagedrawable ( d ) ; 45 } catch ( Exception e ) { 46 Log. d( "TEST", "ERROR "+e. getmessage ( ) ) ; 47 } 48 } 49 } ) ; 50 image=new ImageView ( this ) ; 51 mainlayout. addview ( image ) ; 5 LinearLayout. LayoutParams iparams= 53 ( LinearLayout. LayoutParams ) image. getlayoutparams ( ) ; 54 iparams. width =100; 55 iparams. height =100; 56 image. setlayoutparams ( iparams ) ; 57 58 } 59 } 16