PDA

View Full Version : [J2ME] Download file xml: problema eclipse o di programmazione?


jeremy.83
16-01-2009, 12:40
Ciao a tutti, dopo essermi sentito in pvt col moderatore di sezione che mi ha consigliato di postare qui, espongo il mio problema, che non riesco a capire se sia legato a eclipse o alla programmazione in sè.

Sto facendo un progetto in javaME per un esame, che ho quasi finito, l'unica cosa strana che mi capita è legata nel momento in cui la midlet tenta il download di un file xml che viene generato da una pagina php, che a sua volta pesca i dati da un DB mysql.

Vi faccio vedere i 2 metodi coinvolti nel download + la classe che esegue il thread del download:

public void downloadEvents(){
String lat = "" + currentQC.getLatitude();
String lon = "" + currentQC.getLongitude();
String selection = categoria.getString(categoria.getSelectedIndex());
String eventsUrl = "http://localhost/mobcomp/send_xml_to_midlet.php?cat=";
if ( selection.compareTo("Concerti") == 0 )
eventsUrl += "concerti&lat="+lat+"&lon="+lon;
if ( selection.compareTo("Fiere") == 0 )
eventsUrl += "fiere&lat="+lat+"&lon="+lon;
if ( selection.compareTo("Mostre") == 0 )
eventsUrl += "mostre&lat="+lat+"&lon="+lon;
if ( selection.compareTo("Sport") == 0 )
eventsUrl += "sport&lat="+lat+"&lon="+lon;
readEvents(eventsUrl);
}

public void readEvents(String eventsUrl){
Display.getDisplay(this).setCurrent(formDownloading);
HttpDownloaderThread hdt = new HttpDownloaderThread(eventsUrl, this);
hdt.start();
}

public class HttpDownloaderThread extends Thread{
private String url;
private HttpDownloadListener listener;
private HttpConnection connection;
private InputStream is;

public HttpDownloaderThread(String _url, HttpDownloadListener _listener){
url = _url;
listener = _listener;
}

public void run(){
try{
connection = (HttpConnection) Connector.open(url);
int responseCode = connection.getResponseCode();

if (responseCode == HttpConnection.HTTP_OK){
is = connection.openInputStream();

ByteArrayOutputStream buffer = new ByteArrayOutputStream();
byte[] data = new byte[4096];
int length;
while ( (length = is.read(data)) != -1){
buffer.write(data, 0 , length);
}
closeHttpConnection();
if (url.startsWith("http://localhost/mobcomp/send_xml_to_midlet.php"))
listener.resourceDownloaded(url, buffer.toByteArray());
if (url.startsWith("http://tiger"))
listener.mapResourceDownloaded(url, buffer.toByteArray());
}
else{
closeHttpConnection();
listener.downloadFailed(url, new Exception("Http error: " + Integer.toString(responseCode)));
}
}catch(Exception e){
e.printStackTrace();
listener.downloadFailed(url, e);
}finally{
}
}

public void closeHttpConnection(){
if (is != null){
try{
is.close();
}catch (Exception e){
}finally{
is = null;
}
}
if (connection != null){
try{
connection.close();
}catch (Exception e){
}finally{
connection = null;
}
}
}
}

In esecuzione con questo codice la midlet non scarica nessun file e va in connection error.

Premetto che sto usando Vista 32 bit, Eclipse SDK Europa come ambiente di sviluppo e simulo l'esecuzione della midlet utilizzando il Wireless Toolkit di Sun. Come ISP ho Fastweb.

Se però io sostituisco nella stringa eventsUrl, "localhost" col mio indirizzo di fastweb (1.xx.xx.xx), la midlet scarica correttamente il file e termina correttamente (ovviamente sostituisco localhost anche nel downloader 3d).

Ho già provato a disabilitare il firewall di windows, ma ottengo ancora lo stesso errore.

Non riesco a capire se è un'impostazione errata di eclipse o se devo modificare del codice.

Grazie a tutti, scusate se sono stato un po' lunghetto,
Ciao.

jeremy.83
17-01-2009, 12:38
:help:

jeremy.83
18-01-2009, 16:42
:help:

jeremy.83
19-01-2009, 12:27
Ma.. nessuno proprio??

please.... :help:

jeremy.83
21-01-2009, 20:22
Ho risolto... :D

Avevo un problema legato al lavoro e la sua risoluzione ha portato poi alla soluzione di quest'altra magagna.

In realtà è più un workaround, di fatto ho impostato al server apache un virtual host, in modo che nella stringa di inserimento URL non debba mettere anche "localhost" o l'indirizzo, ma solo l'alias.

Spero che possa essere di aiuto anche a qualcun altro.

Ciao.