package com.openvehicles.OVMS.ui; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.ArrayList; import com.google.gson.*; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import com.google.gson.stream.JsonReader; import com.luttu.Main; import com.openvehicles.OVMS.entities.ChargePoint; import com.openvehicles.OVMS.ui.utils.Database; // This is the OCM API fetch background job public class GetMapDetails extends AsyncTask<Void, Void, Void> { private static final String TAG = "GetMapDetails"; Main main; String url; Database database; afterasytask name; Gson gson; ArrayList<ChargePoint> chargePoints; public interface afterasytask { public void after(boolean flBoolean); } public GetMapDetails(Context context, String url, afterasytask name) { main = new Main(context); this.url = url; database = new Database(context); this.name = name; gson = new Gson(); chargePoints = new ArrayList<ChargePoint>(); } @Override protected void onPreExecute() { super.onPreExecute(); // main.Diashow(); } @Override protected void onCancelled(Void result) { Log.d(TAG, "cancelled"); } @Override protected Void doInBackground(Void... params) { if (isCancelled()) return null; // read from OCM: Log.d(TAG, "reading from url=" + url); try { getdata(); } catch (IOException e) { e.printStackTrace(); } Log.d(TAG, "read " + chargePoints.size() + " chargepoints"); // update database: database.beginWrite(); int i; for (i = 0; !isCancelled() && (i < chargePoints.size()); i++) { database.insert_mapdetails(chargePoints.get(i)); } database.endWrite(true); Log.d(TAG, "saved " + i + " chargepoints to database"); return null; } @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub super.onPostExecute(result); // main.Diacancel(); name.after(true); database.close(); } private void getdata() throws IOException { // open URL for JSON parser: URL obj_URL = new URL(url); InputStream in = obj_URL.openStream(); JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8")); // read charge points array: reader.beginArray(); while (!isCancelled() && reader.hasNext()) { ChargePoint chargePoint = gson.fromJson(reader, ChargePoint.class); chargePoints.add(chargePoint); } reader.endArray(); reader.close(); } }