Java tutorial
/* * Copyright (C) 2011-14 asksven * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.asksven.betterbatterystats.services; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.Calendar; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import com.asksven.android.common.utils.DateUtils; import com.asksven.betterbatterystats.data.KbData; import com.asksven.betterbatterystats.data.KbDbHelper; import com.google.gson.Gson; import android.app.IntentService; import android.content.Intent; import android.content.SharedPreferences; import android.os.IBinder; import android.preference.PreferenceManager; import android.util.Log; /** * @author sven * */ public class KbReaderService extends IntentService { private static final String TAG = "KbReaderService"; private static final String URL = "http://asksven.github.com/BetterBatteryStats-Knowledge-Base/kb_v1.0.json"; private static boolean m_transactional = false; public KbReaderService() { super("KbReaderService"); } @Override public void onHandleIntent(Intent intent) { m_transactional = true; SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); Log.i(TAG, "Called at " + DateUtils.now()); KbData data = null; KbDbHelper myDB = KbDbHelper.getInstance(this); String strUrlMod = sharedPrefs.getString("kb_url_appender", ""); try { InputStream source = retrieveStream(URL + strUrlMod); if (source != null) { Gson gson = new Gson(); Reader reader = new InputStreamReader(source); // Now do the magic. data = gson.fromJson(reader, KbData.class); } // testing with static data //data = new Gson().fromJson(SampleKbData.json, KbData.class); // save data and update timestamp myDB.save(data); // update cache update timestamp SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = prefs.edit(); editor.putLong("cache_updated", Calendar.getInstance().getTimeInMillis()); editor.commit(); } catch (Exception e) { e.printStackTrace(); } stopSelf(); m_transactional = false; } @Override public IBinder onBind(Intent intent) { return null; } public static boolean isTransactional() { return m_transactional; } private static InputStream retrieveStream(String url) { DefaultHttpClient client = new DefaultHttpClient(); HttpGet getRequest = new HttpGet(url); try { HttpResponse getResponse = client.execute(getRequest); final int statusCode = getResponse.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { Log.w(TAG, "Error " + statusCode + " for URL " + url); return null; } HttpEntity getResponseEntity = getResponse.getEntity(); return getResponseEntity.getContent(); } catch (IOException e) { getRequest.abort(); Log.w(TAG, "Error for URL " + url, e); } return null; } }