dafür müsstest du aber mal deinen code zeigen
Ich möchte gerne in meiner App öffentliche Nahverkehrsdaten (GTFS) öffnen, wie zB. das von Berlin. Die gezippte Datei ist beispielsweise ca. 30 MB groß. Entpackt hat beispielsweise die trips.txt etwas über 11 MB mit knapp 232.000 Zeilen.
Hier die Methode welche die Datei Zeilenweise ausließt (achja, die Dateien sind entpackt im assets Ordner, was ja perse etwas langsamer sein soll als zB SD Karte):
EDIT: Habe einiges optimiert, siehe "AUSkommentare"
private void readTrips(AssetManager a) {
Log.d(TAG, " Start reading file...");
int lineNumber = 0;
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(a.open("trips.txt")));
// do reading, usually loop until end of file reading
String mLine = reader.readLine(); // erste Zeile
while ((mLine = reader.readLine()) != null) {
//if (lineNumber > 0)
//{
parseTripsByLine(mLine);
//}
lineNumber++;
}
} catch (IOException e) {
Log.e(TAG, e.getLocalizedMessage());
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
Log.e(TAG, e.getLocalizedMessage());
}
}
}
}
Alles anzeigen
UInd hier das zerlegen der einzelnen Zeile:
private long parseTripsByLine(String line) {
String[] trip_properties = line.split(",");
// error codes
//if (trip_properties.length < 1) {
// Log.d(LOG_TAG, "Empty line!");
// return -2; // empty line
//} else if (trip_properties.length < 4) {
// return -3; // incomplete data chunk
//} else if (line.indexOf('"') != 0 || line.contains("route_id")) {
// return -4; // first line
//}
String route_id = StringUtils.chopFirstAndLast(trip_properties[0]);
String service_id = StringUtils.chopFirstAndLast(trip_properties[1]);
String trip_id = StringUtils.chopFirstAndLast(trip_properties[2]);
String shape_id = StringUtils.chopFirstAndLast(trip_properties[3]);
String trip_headsign = StringUtils.chopFirstAndLast(trip_properties[4]);
int t = -1;
try{
t = Integer.parseInt(StringUtils.chopFirstAndLast(trip_properties[5]).replace("\"", ""));
} catch (NumberFormatException e)
{
Log.e(LOG_TAG, "trip_direction_id was NOt set. Use default trip_direction_id " + Constants.DEFAULT_DIRECTION + " in database." );
}
String block_id = StringUtils.chopFirstAndLast(trip_properties[6]);
// populate container
return tripsDB.addTrip( route_id,
service_id,
trip_id,
shape_id,
trip_headsign,
t,
block_id );
}
Alles anzeigen