From 56ebcb334c94107715e1ed4a5097b0b164b89d77 Mon Sep 17 00:00:00 2001 From: Christine Emrich Date: Wed, 28 Sep 2016 17:21:28 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20utf-8=20issue=20for=20par=C3=B6amentsfern?= =?UTF-8?q?sehen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../programguide/helper/StringRequest.java | 96 +++++++++++++++++++ .../parliament/ParliamentDownloader.java | 4 +- 2 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 programguide/src/main/java/de/christinecoenen/code/programguide/helper/StringRequest.java diff --git a/programguide/src/main/java/de/christinecoenen/code/programguide/helper/StringRequest.java b/programguide/src/main/java/de/christinecoenen/code/programguide/helper/StringRequest.java new file mode 100644 index 00000000..9793e2ca --- /dev/null +++ b/programguide/src/main/java/de/christinecoenen/code/programguide/helper/StringRequest.java @@ -0,0 +1,96 @@ +package de.christinecoenen.code.programguide.helper; + +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.toolbox.HttpHeaderParser; + +import java.io.UnsupportedEncodingException; + +/** + * A canned request for retrieving the response body at a given URL as a String. + * @see "http://stackoverflow.com/a/22694622/3012757" + */ +@SuppressWarnings({"unused", "WeakerAccess", "SameParameterValue", "JavaDoc"}) +public class StringRequest extends Request { + private final Response.Listener mListener; + + + /** + * the parse charset. + */ + private String charset = null; + + /** + * Creates a new request with the given method. + * + * @param method the request {@link Method} to use + * @param url URL to fetch the string at + * @param listener Listener to receive the String response + * @param errorListener Error listener, or null to ignore errors + */ + public StringRequest(int method, String url, Response.Listener listener, + Response.ErrorListener errorListener) { + super(method, url, errorListener); + mListener = listener; + } + + /** + * Creates a new GET request. + * + * @param url URL to fetch the string at + * @param listener Listener to receive the String response + * @param errorListener Error listener, or null to ignore errors + */ + public StringRequest(String url, Response.Listener listener, Response.ErrorListener errorListener) { + this(Method.GET, url, listener, errorListener); + } + + /** + * Creates a new GET request with the given Charset. + * + * @param url URL to fetch the string at + * @param listener Listener to receive the String response + * @param errorListener Error listener, or null to ignore errors + */ + public StringRequest(String url, String charset, Response.Listener listener, Response.ErrorListener errorListener) { + this(Method.GET, url, listener, errorListener); + this.charset = charset; + } + + @Override + protected void deliverResponse(String response) { + mListener.onResponse(response); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + String parsed; + try { + if(charset != null) { + parsed = new String(response.data, charset); + } else { + parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + } + } catch (UnsupportedEncodingException e) { + parsed = new String(response.data); + } + return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); + } + + /** + * @return the Parse Charset Encoding + */ + public String getCharset() { + return charset; + } + + /** + * set the Parse Charset Encoding + * @param charset + */ + public void setCharset(String charset) { + this.charset = charset; + } + +} diff --git a/programguide/src/main/java/de/christinecoenen/code/programguide/plugins/parliament/ParliamentDownloader.java b/programguide/src/main/java/de/christinecoenen/code/programguide/plugins/parliament/ParliamentDownloader.java index 16687913..45fe8174 100644 --- a/programguide/src/main/java/de/christinecoenen/code/programguide/plugins/parliament/ParliamentDownloader.java +++ b/programguide/src/main/java/de/christinecoenen/code/programguide/plugins/parliament/ParliamentDownloader.java @@ -6,8 +6,8 @@ import android.util.Log; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; -import com.android.volley.toolbox.StringRequest; +import de.christinecoenen.code.programguide.helper.StringRequest; import de.christinecoenen.code.programguide.model.Channel; import de.christinecoenen.code.programguide.model.Show; import de.christinecoenen.code.programguide.plugins.BaseProgramGuideDownloader; @@ -31,7 +31,7 @@ public class ParliamentDownloader extends BaseProgramGuideDownloader { public void download() { String url = (channel == Channel.PARLAMENTSFERNSEHEN_1) ? XTML_URL_1 : XTML_URL_2; - request = new StringRequest(url, new Response.Listener() { + request = new StringRequest(url, "UTF-8", new Response.Listener() { @Override public void onResponse(String response) { Log.d(TAG, "xml loaded: " + response);