N
neubs
Neues Mitglied
- 0
Guten morgen allerseits,
ich hab da mal ne Frage zum HttpClient.
Ich habe einen Thread der eine Tabelle (SQLITE) durchschleift und einezelne Datensätze daraus über nen HttpClient sendet.
Das funktioniert zwar soweit auch aber ich bekomme ab und zu nen Fehler:
"Leak found - E/AndroidHttpClient(499): java.lang.IllegalStateException: AndroidHttpClient created and never closed".
Nun wollte ich nach dem Senden den HttpClient wieder schliessen (client.close(); doch das lässt mir irgendwie Eclipse nicht zu - sagt dann immer "Nicht addressierbarer Code".
Hier mal n bissl Code dazu:
Und auch nochmal die Funktion in der die Daten gesendet werden:
Kann ich in der Funktion SendBookingToServer() überhaupt den HttpClient wieder schliessen? Und wenn ja wie kann ich das machen?
Sonst müsste ich den ganzen Spass nochmal umbauen so das Funktion zum senden ein Array erhält in dem dann die einzelnen Datensätze zum senden stehen. In der entgültigen Verwendung der App werden wahrscheinlich sowieso nur 1 - 3 Datensätze auf einmal gesendet werden (das funktioniert ja) - wollte das ganze aber gleich sauber aufbauen um später keine bösen Überraschugen erleben zu müssen
Edit: getestet hab ich das ganze in der virtuellen Umgebung - eine andere Möglichkeit hab ich im Momtent leider nicht.
Vielen Dank schonmal
mfg
sebastian
ich hab da mal ne Frage zum HttpClient.
Ich habe einen Thread der eine Tabelle (SQLITE) durchschleift und einezelne Datensätze daraus über nen HttpClient sendet.
Das funktioniert zwar soweit auch aber ich bekomme ab und zu nen Fehler:
"Leak found - E/AndroidHttpClient(499): java.lang.IllegalStateException: AndroidHttpClient created and never closed".
Nun wollte ich nach dem Senden den HttpClient wieder schliessen (client.close(); doch das lässt mir irgendwie Eclipse nicht zu - sagt dann immer "Nicht addressierbarer Code".
Hier mal n bissl Code dazu:
Code:
@Override
protected Boolean doInBackground(String... params) {
boolean ret = false;
boolean retAll = false;
String sSql = "";
int bookTS = 0;
int bookID = 0;
String bookType = "";
SQLiteDatabase dbo = null;
datenbank db = new datenbank(myCtx);
Verbindung cn = new Verbindung(myCtx);
try {
dbo = openOrCreateDatabase(db.getDBName(), MODE_PRIVATE, null);
sSql = "SELECT _id, booktype, ts, sent FROM " + db.getBookingTableName() + " WHERE sent=0";
Cursor activeCursor = dbo.rawQuery(sSql, null);
startManagingCursor(activeCursor);
activeCursor.moveToFirst();
// Zuweisen des Maxwertes für die Progressbar
gesamtDS = activeCursor.getCount();
retAll = true;
while (!activeCursor.isAfterLast()){
//Datensatzcounter um 1 erhöhen
actDS = actDS + 1;
publishProgress(actDS);
bookType = activeCursor.getString(activeCursor.getColumnIndex("booktype"));
bookTS = activeCursor.getInt(activeCursor.getColumnIndex("ts"));
bookID = activeCursor.getInt(activeCursor.getColumnIndex("_id"));
// SendeString erstellen
String sSendString = cn.makeBookString( bookTS, "",bookType);
// und wegschicken ...
ret = cn.SendBookingToServer(sSendString);
if (ret == true) {
} else {
retAll =false;
}
activeCursor.moveToNext();
}
} catch (Exception e) {
Log.e("Error", e.toString());
}
finally {
if (dbo != null) {
dbo.close();
}
}
return retAll;
}
Code:
public boolean SendBookingToServer(String sBooking) {
String sAnswer;
try {
sAnswer = "";
if ((Server.compareTo("") != 0 ) && (Code.compareTo("")!=0) && (PIN.compareTo("") !=0) && (MitarbeiterNr.compareTo("")!=0) ) {
AndroidHttpClient client = AndroidHttpClient.newInstance("TxApp"); //Log.i("log", "client erzeugt");
HttpGet req = new HttpGet(sBooking); //Log.i("log", "request erzeugt");
HttpResponse resp = client.execute(req); //Log.i("log", "response gesendet");
HttpEntity entinity = resp.getEntity(); //Log.i("log", "entinity bekommen");
InputStreamReader reader = new InputStreamReader(entinity.getContent(), "utf-8");
int c = reader.read();
while (c!=-1) {
sAnswer += (char)c;
c = reader.read();
}
sAnswer = sAnswer.trim(); //Log.i("log", "Antwort:" + sAnswer + "Len:" + sAnswer.length());
if (sAnswer.compareTo("OK")==0) {
// Server meldete OK
return true;
} else {
return false;
}
// Hier wollte ich den Client wieder schliessen
client.close();
} else {
return false;
}
} catch (IOException e) {
Log.i("log", "error:" + e);
return false;
}
}
Sonst müsste ich den ganzen Spass nochmal umbauen so das Funktion zum senden ein Array erhält in dem dann die einzelnen Datensätze zum senden stehen. In der entgültigen Verwendung der App werden wahrscheinlich sowieso nur 1 - 3 Datensätze auf einmal gesendet werden (das funktioniert ja) - wollte das ganze aber gleich sauber aufbauen um später keine bösen Überraschugen erleben zu müssen
Edit: getestet hab ich das ganze in der virtuellen Umgebung - eine andere Möglichkeit hab ich im Momtent leider nicht.
Vielen Dank schonmal
mfg
sebastian