Witam. Zrobiłem "okienko do rysowania" w mojej aplikacji na androida. Użytkownik jak rysuje to jest to zapisywane w formie krzywych w taki sposób:
ArrayList<Line> lines;
//dafinica Line:
public class Line {
ArrayList<PointF> points;
}
line - typ dla krzywej
lines - zbiór krzywych
lines.points - zbiór pubktów dla danej krzywej
typ PointF można zdefinciować tak:
ArrayList<Line> lines;
public class PointF {
float x;
float y;
}
Muszę te dane wysyłać do skryptu php. Użyłem do tego takiego kodu:
n = 0;
while(n < lines.size()){
i = 0;
while (i < lines.get(n).points.size()){
data+=String.valueOf(lines.get(n).points.get(i).x);
data+="a";
data+=String.valueOf(lines.get(n).points.get(i).y);
if(i<size-1)data+="b";
i++;
}
if(n<lines.size()-1)data+="c";
n++;
}
url = new URL("http://abc.pl/skrypt.php?data=" + data);
URLConnection con = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String strL;
String str ="";
while ((strL = in.readLine()) != null) {
str += strL;
}
in.close();
Litery oddzielają dane i przy użyciu preg_split w PHP tworzę strukturę taką jak wyżej przedstawiłem (w javie) i na niej wykonuje pozostałe operacje. Niestety nie jest to dobry sposób przesyłania dużej ilości danych. Przy kilku krzywych z wieloma punktami adres url jest bardzo długi, wszystko wolno działa i często nie udaje się przesłać danych w całości. W jaki sposób najlepiej przesyłać te dane? Przy okazji rady jak przechowywac je w bazi danych też byłby mile widziane :)
P.s kod tutaj zamieszczony został "przycięty" tak, żeby wystraczyć do rozwiązania problemu, bez zbędnego pisania. W rzeczywistości jest jeszcze obsługa timeout, itd.