Frage

Ich benutze ICIC4J, um das iCale Format auf dem Android zu analysieren.

Meine Eingabe -ICs lautet:

    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

Aber wenn ich versuche, dies zu analysieren, bekomme ich die Ausnahme:

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

Der entsprechende Code ist:

    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;
}
}
War es hilfreich?

Lösung

Meine Vermutung wären die Linienende in der Antwortzeichenfolge von dem, was ICIC4J erwartet.

Der Standard gibt an, dass Sie CRLF (auch bekannt als ' r n') verwenden sollten.

Andere Tipps

Die Eingabedatei ist gültig, das Problem ist mit Ihrer Methode InputStreamToString (), die eine Readline () für die Eingabe (die die Neulinge befreit) ausführt und an eine Zeichenfolge angehängt wird, ohne die Neulinge neu zu beraten.

Ich würde vorschlagen, entweder eine Alternative zu Readline () zu verwenden (wenn Sie Neulinien aus der Originaldatei erhalten möchten) oder Ihre eigenen Neulisten in der Schleife anhängen, z. B.:

while ((line = rd.readLine()) != null) {
    total.append(line);
    total.append("\r\n");
    Log.v("debug", "Line: " + line);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top