Pregunta

Estoy usando ical4J para analizar el formato ical en el android.

Mi ICS de entrada es:

    BEGIN:VCALENDAR
    BEGIN:VEVENT
    SEQUENCE:5
    DTSTART;TZID=US/Pacific:20021028T140000
    DTSTAMP:20021028T011706Z
    SUMMARY:Coffee with Jason
    UID:EC9439B1-FF65-11D6-9973-003065F99D04
    DTEND;TZID=US/Pacific:20021028T150000
    END:VEVENT
    END:VCALENDAR

Pero cuando trato de analizar esto, obtengo la excepción:

Error at line 1: Expected [VCALENDAR], read [VCALENDARBEGIN]

El código relevante es:

    HttpHelper httpHelper = new HttpHelper(
            "http://10.0.2.2/getcalendar.php", params);
    StringBuilder response = httpHelper.postData();

    StringReader sin = new StringReader(response.toString());
    CalendarBuilder builder = new CalendarBuilder();
    Calendar cal = null;
    try {
        cal = builder.build(sin);
    } catch (IOException e) {
        Log.d("calendar", "io exception" + e.getLocalizedMessage());
    } catch (ParserException e) {
        Log.d("calendar", "parser exception" + e.getLocalizedMessage());

}

public class HttpHelper {
final HttpClient client;
final HttpPost post;
final List<NameValuePair> data;

public HttpHelper(String address, List<NameValuePair> data) {
    client = new DefaultHttpClient();
    post = new HttpPost(address);
    this.data = data;
}

private class GetResponseTask extends AsyncTask<Void, Void, StringBuilder> {
    protected StringBuilder doInBackground(Void... arg0) {
        try {
            HttpResponse response = client.execute(post);
            return inputStreamToString(response.getEntity().getContent());
        } catch (ClientProtocolException e) {
        } catch (IOException e) {
        }
        return null;
    }
}

public StringBuilder postData() {
    try {
        post.setEntity(new UrlEncodedFormEntity(data));
        return (new GetResponseTask().execute()).get();
    } catch (UnsupportedEncodingException e) {
    } catch (InterruptedException e) {
    } catch (ExecutionException e) {
    }
    return null;
}

private StringBuilder inputStreamToString(InputStream is)
        throws IOException {
    String line = "";
    StringBuilder total = new StringBuilder();

    // Wrap a BufferedReader around the InputStream
    BufferedReader rd = new BufferedReader(new InputStreamReader(is));

    // Read response until the end
    while ((line = rd.readLine()) != null) {
        total.append(line);
        Log.v("debug", "Line: " + line);
    }
    // Return full string
    return total;
}
}
¿Fue útil?

Solución

Supongo que las terminaciones de línea en la cadena de respuesta son diferentes de lo que ical4j espera.

El estándar especifica que debe usar CRLF (también conocido como ' r n').

Otros consejos

El archivo de entrada es válido, el problema es con su método inputStreamToString (), que realiza una línea de lectura () en la entrada (que elimina las nuevas líneas) y agrega una cadena sin volver a admitir las líneas nuevas.

Sugeriría usar una alternativa a Readline () (si desea preservar nuevas líneas del archivo original) o agregar sus propias líneas nuevas en el bucle, por ejemplo:

while ((line = rd.readLine()) != null) {
    total.append(line);
    total.append("\r\n");
    Log.v("debug", "Line: " + line);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top