Ankit Singh
Ankit Singh

Reputation: 181

rest data getting cached android

I am using the code below to fetch data from server. When the data is updated on server, I get the old data from this method. When I use the same method in the web browser i get updated data.

Even when I stop the app and start again it reflects old data but when I have cleaned all my tasks using task manager, I get new data.

Is the data being cached on the device as i am making new request each time

String response = null;
InputStream inputStream = null;
HttpURLConnection urlConnection = null;
try {

    URL url = new URL(urlString);
    urlConnection = (HttpURLConnection) url.openConnection();
    urlConnection.setReadTimeout(10000);
    urlConnection.setConnectTimeout(15000);

    if (method == POST) {
        urlConnection.setDoInput(true);
        urlConnection.setDoOutput(true);
        urlConnection.setRequestProperty("Accept", "application/json");
        urlConnection.setRequestMethod("POST");
        OutputStream os = urlConnection.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
        writer.write(params);
        writer.flush();
        writer.close();
        os.close();
    } else {
        urlConnection.setRequestMethod("GET");
    }

    int statusCode = urlConnection.getResponseCode();

    /* 200 represents HTTP OK */
    if (statusCode == HttpURLConnection.HTTP_OK) {
        inputStream = new BufferedInputStream(urlConnection.getInputStream());
        response = convertInputStreamToString(inputStream);
        return response;
    }

I searched the web and found that use cache is on by default, so these two line might help

    urlConnection.setUseCaches(false);
    urlConnection.addRequestProperty("Cache-Control", "no-cache");

Upvotes: 1

Views: 245

Answers (1)

Amy
Amy

Reputation: 4032

Append some random parameter i.e. current timestamp to the URL then it will treat as fresh request.

Change This

URL url = new URL(urlString);

To

URL url = new URL(urlString+new Date().getTime());

Upvotes: 1

Related Questions