Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Το έκανα τελικά με TCP server και client το κινητό και δουλέυει τέλεια.Απλά τώρα θέλω να στείλω από το πρόγραμμα που τρέχει στον υπολογιστή στο κινήτο δεδομένα απο την βάση δεδομένων που έχω στον υπολογιστή.Μήπως γίνεται αυτό με έναν εύκολο τρόπο  γιατι ο τρόπος που σκέφτηκα είναι πολύπλοκος.Η βάση δεδομένων περίεχει και εικόνες.Γίνεται με  ObjectOutputStream ??

Δημοσ.

Οριζεις ενα πρωτοκολλο και τελειωνει το θεμα. Το tcp client server δημιουργει ενα λινκ μεταξυ δυο ποϊντ, το πως θα "μιλισουν" μεταξυ τους αυτα τα ποιντ ειναι δικο σου θεμα.

Βεβαια υπαρχει και ο ευκολος τροπος, δηλαδη συνδεεσαι με την βαση απευθειας απο το κινητο.

Δημοσ.

Ναι μπορείς να στείλεις απευθείας Image ή Buffered Image. Το θέμα είναι ότι δεν έχεις μόνο Image στον συγκεκριμένο πίνακα; Σίγουρα θα έχεις και ID. Άρα πρέπει να μοντελοποιήσεις όσους πίνακες θέλεις να διαχειριστείς και να στέλνεις ένα τέτοιο αντικείμενο στον Client. Τώρα το αντικείμενο μπορεί να είναι απλά ένα Entity, μπορεί να είναι ένα ArrayList<Entity> κτλ, οπότε θα πρέπει να βλέπεις απο τον Client, τι λαμβάνεις για να το διαχειριστείς ανάλογα. (αυτό είναι και μέρος του πρωτοκόλλου που πρέπει να ορίσεις).

 

Το πιο απλό φυσικά είναι να συνδεθείς απευθείας στη βάση και να τελειώνεις.

Δημοσ.

Το έκανα τελικά με TCP server και client το κινητό και δουλέυει τέλεια.Απλά τώρα θέλω να στείλω από το πρόγραμμα που τρέχει στον υπολογιστή στο κινήτο δεδομένα απο την βάση δεδομένων που έχω στον υπολογιστή.Μήπως γίνεται αυτό με έναν εύκολο τρόπο  γιατι ο τρόπος που σκέφτηκα είναι πολύπλοκος.Η βάση δεδομένων περίεχει και εικόνες.Γίνεται με  ObjectOutputStream ??

 

Με ObjectOutpuStream στέλνεις ένα object το οποίο θα λάβεις με το αντίστοιχο InputStream στον άλλο node. 

 

Εάν έχεις το "definition" του Object τότε η αντιστοιχία των bytes που στέλνονται μέσω δικτύου θα γίνει αυτόματα. Θα πρέπει όμως να το στείλεις, να φροντίσεις το blocking του accept() κτλ. 

 

Δημοσ.

Πως ακριβώς θα δουλέψει όμως το ObjectInputStream?

Στον android client εχω

ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
 AvaliableMenu p = (AvaliableMenu) in.readObject();

όπου AvaliableMenu ειναι ένα μια class
 

import android.graphics.Bitmap;

public class AvaliableMenu {
	String name=null ;
    String description =null;
    Bitmap  MenuImage=null; 
}

η οποία υπάρχει ακριβώς ίδια στο java server που τρεχει στο pc
 

import java.awt.image.BufferedImage;
import java.io.Serializable;

public class AvaliableMenu implements Serializable{
    public String name ;
    public String description ;
    transient public BufferedImage MenuImage;
    
}

και χρησιμοποιω

ObjectOutputStream os = new ObjectOutputStream(socket.getOutputStream());
  os.writeObject(Mymenu);

αφού πρωτα δωσω τιμές στα fields της κλάσης.
οταν προσπάθω να στείλω τα δεδόμενα απο τον σέρβερ στον client ο  emulator μου πετάει exception :

08-10 03:00:24.164: W/System.err(5352): java.lang.ClassNotFoundException: AvaliableMenu
08-10 03:00:24.204: W/System.err(5352):     at java.lang.Class.classForName(Native Method)
08-10 03:00:24.215: W/System.err(5352):     at java.lang.Class.forName(Class.java:217)
08-10 03:00:24.215: W/System.err(5352):     at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:2301)
08-10 03:00:24.215: W/System.err(5352):     at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1660)
08-10 03:00:24.215: W/System.err(5352):     at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:683)
08-10 03:00:24.215: W/System.err(5352):     at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1803)
08-10 03:00:24.215: W/System.err(5352):     at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787)
08-10 03:00:24.215: W/System.err(5352):     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2003)
08-10 03:00:24.215: W/System.err(5352):     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1960)
08-10 03:00:24.224: W/System.err(5352):     at com.example.ordermenu.MainActivity$LongOperation.doInBackground(MainActivity.java:67)
08-10 03:00:24.224: W/System.err(5352):     at com.example.ordermenu.MainActivity$LongOperation.doInBackground(MainActivity.java:1)
08-10 03:00:24.224: W/System.err(5352):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
08-10 03:00:24.224: W/System.err(5352):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
08-10 03:00:24.224: W/System.err(5352):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
08-10 03:00:24.224: W/System.err(5352):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
08-10 03:00:24.234: W/System.err(5352):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-10 03:00:24.234: W/System.err(5352):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
08-10 03:00:24.234: W/System.err(5352):     at java.lang.Thread.run(Thread.java:856)
08-10 03:00:24.234: W/System.err(5352): Caused by: java.lang.NoClassDefFoundError: AvaliableMenu
08-10 03:00:24.234: W/System.err(5352):     ... 18 more
08-10 03:00:24.234: W/System.err(5352): Caused by: java.lang.ClassNotFoundException: AvaliableMenu
08-10 03:00:24.244: W/System.err(5352):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
08-10 03:00:24.244: W/System.err(5352):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
08-10 03:00:24.244: W/System.err(5352):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
08-10 03:00:24.254: W/System.err(5352):     ... 18 more
 

Τι κάνω λάθος?

Δημοσ.

Δεν το λες και "ακριβως ιδια". Η μια εχει bitmap και αλλη εχει bufferedImage που ειναι και non-serializable.

 

Αν και απο τα exception βλεπω οτι εχεις θεμα με το classname. Η καλση σου εχει το ιδιο name σε server και client?

Δημοσ.

γιατί δεν τις κάνεις ίδιες; και τις 2 serializable και τις 2 με το ίδιο ID και για την εικόνα να χρησιμοποιήσεις byte[]?

Δημοσ.

Όλα οκ,έπρεπε να κάνω τις 2 κλάσεις ίδιες και Serializable  και επίσης οι 2 κλάσεις να έχουν το ίδιο package. Τώρα δεν πετάει πλέον ClassNotFoundException.

Δημοσ.

Όλα οκ,έπρεπε να κάνω τις 2 κλάσεις ίδιες και Serializable  και επίσης οι 2 κλάσεις να έχουν το ίδιο package. Τώρα δεν πετάει πλέον ClassNotFoundException.

Την επομενη φορα οταν δεις το ClassNotFound, εχε το νου σου οτι τα classname σε αυτες τις γλωσσες συμπεριλαμβανουν και το packet/namespace.

Δημοσ.

Και λογικά θα πρέπει να βρίσκεις ΠΟΛΥ απλή τη διαδικασία αποστολής object με το ObjectStream. Σωστά; 

Πραγματικά είναι πολύ απλή η διαδικασία,ετσι όπως το σκεφτόμουν πριν αρχίσω με την θεώρια των δικτύων που ήξερα μου φαινόταν αρκετά δύσκολο αλλα τελικά με την java γίνονται όλα εύκολα :P

Το εχω φτάσει ενα βημα πιο πέρα μάλιστα και στέλνω πίνακα απο object και είναι πραγματικά πολύ εύκολο.

Δημοσ.

Να σας ρωτησω και κάτι άλλο,ξεφεύγω βέβαια λίγο απο το θέμα αλλά σκέφτηκα να μην ανοίξω αλλο θέμα.Εχω μια βάση δεδομένων στο netbeans (java DB , που τρεχει με τον derby apache ) όταν όμως δημιουργώ το executable jar αρχειο του προγράμματος δεν μπορεί να συνδεθεί στην βάση δεδομένων αν είναι κλείστο το Netbeans(και δεν έχω κάνω connect χειροκίνητα στην βαση) και είναι λογικό. Πως γίνεται να κανω connect στην βαση απο την java ?? Είναι καλός τρόπος αυτός ή υπάρχει καλύτερος(με αάλλο τύπο βάσης δεδομένων) ?

Δημοσ.

όταν κάνεις export και το τρέχεις, το τρέχεις από cmd να δεις τι μήνυμα σου βγάζει; πιθανόν φταίει ότι δεν έχεις στον dist φάκελο τον φάκελο της ΒΔ

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...