21. november 2002 - 15:05
Der er
22 kommentarer og 1 løsning
sende Vector over HttpConnection, mellem en MIDP app og servlet
Jeg har en httpConnection og jeg vil nu gerne sende en vector over denne forbindelse. ?? Er der nogen der kan hjælpe mig med dette. Ved at MIDP understøtter en vector men spørgsmålet er hvordan man sender den over en httpConnection ?
Annonceindlæg tema
21. november 2002 - 15:17
#1
Kan du ikke bare serialize den ned i en String og sende den ?
21. november 2002 - 15:20
#2
hmmmm tjooo men hvordan, og hvad med de objekter der er deri
21. november 2002 - 16:50
#3
arne: Ned i en string ? Mener du ikke ned i et binært array som så bliver sendt ?
21. november 2002 - 17:53
#4
f_bar> Objekterne skal selvfølgelig med over.
21. november 2002 - 17:54
#5
disky> Nej - jeg mente faktisk String. Hvis det havde været en Socket, så var ObjectOutputStream writeObject og standard serialization (som er til et binært array) lige sagen. Men jeg har nul erfaring med at sende binære arrays over HTTP (selvom en PUT vel må kunne gøre det). Jeg ved at man kan sende en String med HTTP (både GET og POST). Derfor.
21. november 2002 - 17:58
#6
Ok, men har du evt. et eksempel eller et link til en side hvor der er et eksempel ??
21. november 2002 - 18:01
#7
arne: Okay så forstår jeg hvad du tænkte på. :-) Personligt ville jeg bruge en Socket :)
21. november 2002 - 18:31
#8
Jeg ville jo nok også have brugt en socket. Men nu er vi altså ovre i HTTP.
21. november 2002 - 18:33
#9
Jeg prøver lige at lede efter noget velegnet.
21. november 2002 - 18:45
#10
Jamen MIDP under støtter da kun HTTPConnection, og ikke socket, eller ?? nå men ja det skal være over http
21. november 2002 - 18:56
#11
Jeg har aldrig brugt MIDP så det har jeg ingen anelse om.
22. november 2002 - 14:10
#12
Har du fundet nogle eksempler arne_v ????
22. november 2002 - 19:41
#13
Ja.
22. november 2002 - 19:41
#14
Men jeg måtte selv lave det ! import java.util.*; import java.io.*; import java.net.*; public class Test3 { public static void main(String[] args) throws Exception { Vector v = new Vector(); v.add(0,new Integer(123)); v.add(1,new String("abc")); String s = encode(v); Vector v2 = (Vector)decode(s); System.out.println((Integer)v2.get(0)); System.out.println((String)v2.get(1)); } private static String encode(Object o) throws Exception { ByteArrayOutputStream ba = new ByteArrayOutputStream(1000); ObjectOutputStream oba = new ObjectOutputStream(ba); oba.writeObject(o); return hexify(ba.toByteArray()); } private static Object decode(String s) throws Exception { ByteArrayInputStream ba = new ByteArrayInputStream(dehexify(s)); ObjectInputStream oba = new ObjectInputStream(ba); return oba.readObject(); } private final static String hexValue[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"}; private static String hexify(byte[] ba) { StringBuffer sb = new StringBuffer(); for(int i = 0; i < ba.length; i++) { sb.append(hexValue[(ba[i] >> 4) & 0x0F]); sb.append(hexValue[ba[i] & 0x0F]); } return sb.toString(); } private static byte[] dehexify(String s) { int l = s.length() / 2; byte[] res = new byte[l]; for(int i = 0; i < l; i++) { res[i] = (byte)Integer.parseInt(s.substring(2*i, 2*i+2), 16); } return res; } }
22. november 2002 - 19:42
#15
Men jeg kan ikke hjælpe dig med, hvordan du får sendt fra MIDP. Men man kan sende strenge med HTTP.
22. november 2002 - 19:44
#16
En af grundene til at det tog så lang tid var at følgende ikke virkede: import java.util.*; import java.io.*; import java.net.*; public class Test3 { public static void main(String[] args) throws Exception { Vector v = new Vector(); v.add(0,new Integer(123)); v.add(1,new String("abc")); String s = encode(v); Vector v2 = (Vector)decode(s); System.out.println((Integer)v2.get(0)); System.out.println((String)v2.get(1)); } private static String encode(Object o) throws Exception { ByteArrayOutputStream ba = new ByteArrayOutputStream(1000); ObjectOutputStream oba = new ObjectOutputStream(ba); oba.writeObject(o); return hexify(ba.toByteArray()); } private static Object decode(String s) throws Exception { ByteArrayInputStream ba = new ByteArrayInputStream(dehexify(s)); ObjectInputStream oba = new ObjectInputStream(ba); return oba.readObject(); } private final static String hexValue[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"}; private static String hexify(byte[] ba) { StringBuffer sb = new StringBuffer(); for(int i = 0; i < ba.length; i++) { sb.append(hexValue[(ba[i] >> 4) & 0x0F]); sb.append(hexValue[ba[i] & 0x0F]); } return sb.toString(); } private static byte[] dehexify(String s) { int l = s.length() / 2; byte[] res = new byte[l]; for(int i = 0; i < l; i++) { res[i] = (byte)Integer.parseInt(s.substring(2*i, 2*i+2), 16); } return res; } } Forklaringen: import java.net.*; public class Test2 { public static void main(String[] args) throws Exception { for(int i = 0; i < 256; i++) { byte[] b = new byte[1]; b[0] = (byte)i; String s = new String(b); System.out.println(i + " : " + test(s)); } } private static boolean test(String s) { return s.equals(URLDecoder.decode(URLEncoder.encode(s))); } }
22. november 2002 - 19:45
#17
Ups forkert paste. Test3 virker. Det er Test som ikke virker. Test2 er god nok som forklaring. import java.util.*; import java.io.*; import java.net.*; public class Test { public static void main(String[] args) throws Exception { Vector v = new Vector(); v.add(0,new Integer(123)); v.add(1,new String("abc")); String s = encode(v); Vector v2 = (Vector)decode(s); System.out.println((Integer)v2.get(0)); System.out.println((String)v2.get(1)); } private static String encode(Object o) throws Exception { ByteArrayOutputStream ba = new ByteArrayOutputStream(1000); ObjectOutputStream oba = new ObjectOutputStream(ba); oba.writeObject(o); return URLEncoder.encode(new String(ba.toByteArray())); } private static Object decode(String s) throws Exception { ByteArrayInputStream ba = new ByteArrayInputStream(URLDecoder.decode(s).getBytes()); ObjectInputStream oba = new ObjectInputStream(ba); return oba.readObject(); } }
23. november 2002 - 12:12
#18
ok'er jeg får nok ikke kigget på det idag
26. november 2002 - 09:25
#19
Ok jeg har lige et par spg arve _v>> 1. Nu kan jeg se at du bruger Integers som objekter i din Vector, hvis jeg nu vil bruge andre objekter, har det indflydelse på koden ?? Dvs. når de skal dehexifies igen, eller når du bruger hexValue ??
26. november 2002 - 09:37
#20
og en MIDlet har vel ikke java.net pakken såå det bliver nok lidt svært at decode vectoren når den er kommet derop, eller ??
26. november 2002 - 10:07
#21
dvs. når den ikke supporterer java.net så kan jeg ikke bruge ObjectInputStream
06. december 2002 - 23:20
#22
takker
07. december 2002 - 07:49
#23
* Nej - metoden kan bruges til alle serializable objekter. Integer and String er kun eksempler. * Ups. Jeg kender ikke MIDlet, men hvis den ikke har ObjectInputStream, så er det et problem.
Kurser inden for grundlæggende programmering