Sfoglia il codice sorgente

The app syncs now smoothly with the API v1. However, some columns in some tables are missing.

Foe example, the "tag" column in table "activity_tag" is missing. The API gives correct data, but the app is parsing it wrong somehow (debug shows the query "INSERT INTO activity_tag (activity) VALUES ("10");"). Also, the "post_tag" table remains empty: Tha API returns the data, but the app doesn't even read it. Without further testing, I don't know of any other table or column with problems.
seavenois 10 anni fa
parent
commit
64be6fa935

+ 12 - 0
app/src/main/java/com/ivalentin/margolariak/GM.java

@@ -18,6 +18,18 @@ import java.util.Locale;
  */
 final class GM {
 
+	final class QUERY {
+
+		final class CREATE{
+
+			//static final String
+		}
+
+		final class DELETE{
+
+		}
+	}
+
 	static final String CLIENT = "com.ivalentin.margolariak";
 
 	/**

+ 58 - 38
app/src/main/java/com/ivalentin/margolariak/Sync.java

@@ -14,6 +14,7 @@ import android.app.Activity;
 import android.app.Dialog;
 import android.content.Context;
 import android.content.SharedPreferences;
+import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.os.AsyncTask;
 import android.util.Log;
@@ -92,8 +93,24 @@ class Sync extends AsyncTask<Void, Void, Void> {
 		if (dialog != null){
 			dialog.dismiss();
 			//Check db version agan
-			SharedPreferences preferences = myContextRef.getSharedPreferences(GM.PREF, Context.MODE_PRIVATE);
-			if (preferences.getInt(GM.PREF_DB_VERSION, GM.DEFAULT_PREF_DB_VERSION) == GM.DEFAULT_PREF_DB_VERSION){
+			//SharedPreferences preferences = myContextRef.getSharedPreferences(GM.PREF, Context.MODE_PRIVATE);
+
+			SQLiteDatabase db = myContextRef.openOrCreateDatabase(GM.DB_NAME, Activity.MODE_PRIVATE, null);
+			if (db.isReadOnly()){
+				Log.e("Db ro", "Database is locked and in read only mode. Skipping sync.");
+				return;
+			}
+
+			//Get database version
+			Cursor cursor;
+			int dbVersion;
+			cursor = db.rawQuery("SELECT sum(version) AS v FROM version;", null);
+			cursor.moveToFirst();
+			dbVersion = cursor.getInt(0);
+			cursor.close();
+			db.close();
+
+			if (dbVersion == GM.DEFAULT_PREF_DB_VERSION){
 				//Create a dialog
 				final Dialog dial = new Dialog(activity);
 				dial.setCancelable(false);
@@ -278,23 +295,31 @@ class Sync extends AsyncTask<Void, Void, Void> {
 		String key;
 		String value;
 		boolean result = true;
-		try{
+		//try{
 			str = data.substring(data.indexOf("[") + 1, data.lastIndexOf("]"));
 			while (str.indexOf("]") > 0){
-				key = str.substring(str.indexOf("\"") + 1, str.indexOf("\"", str.indexOf("\"") + 1));
-				value = str.substring(str.indexOf("["), str.indexOf("]"));
-				str = str.substring(str.indexOf("]") + 1);
-				if (!saveTable(db, key, value)){
-					//Finish the loop if there is an error
-					return false;
+				try {
+					key = str.substring(str.indexOf("\"") + 1, str.indexOf("\"", str.indexOf("\"") + 1));
+					value = str.substring(str.indexOf("["), str.indexOf("]"));
+					str = str.substring(str.indexOf("]") + 1);
+					if (!saveTable(db, key, value)){
+						//Finish the loop if there is an error
+						return false;
+					}
+
+					str = str.substring(str.indexOf("]") + 1);
+				}
+				catch (Exception ex){
+					//End of string
+					Log.d("SAVEDATA", "End of string");
+					str = "";
 				}
-				str = str.substring(str.indexOf("]") + 1);
 			}
-		}
-		catch (Exception ex){
-			Log.e("saveData", "Error saving the remote db data: " + ex.toString());
-			result = false;
-		}
+		//}
+		//catch (Exception ex){
+		//	Log.e("saveData", "Error saving the remote db data: " + ex.toString());
+		//	result = false;
+		//}
 
 		return result;
 	}
@@ -324,9 +349,11 @@ class Sync extends AsyncTask<Void, Void, Void> {
 
 		int i = 0;
 		try {
-			while (str.indexOf("{") > 0){
+			while (str.indexOf("{") > 0) {
 				String row = str.substring(str.indexOf("{"), str.indexOf("}") + 1);
 				totalFields = 0;
+				values = new String[99];
+				keys = new String[99];
 				while (row.indexOf("\",") > 0) {
 					key = row.substring(row.indexOf("\"") + 1, row.indexOf("\":"));
 					value = row.substring(row.indexOf("\"", row.indexOf(":")), row.indexOf("\"", row.indexOf(":") + 2) + 1);
@@ -334,7 +361,7 @@ class Sync extends AsyncTask<Void, Void, Void> {
 
 					keys[totalFields] = key;
 					values[totalFields] = value;
-					totalFields ++;
+					totalFields++;
 
 					row = row.substring(row.indexOf(value) + value.length() + 1);
 				}
@@ -342,31 +369,18 @@ class Sync extends AsyncTask<Void, Void, Void> {
 				//With all the keys and the values, create an INSERT query and add to queries
 				fields = "(";
 				vals = "(";
-				for (int j = 0; j < totalFields; j ++){
+				for (int j = 0; j < totalFields; j++) {
 					fields = fields + keys[j] + ", ";
 					vals = vals + values[j] + ", ";
 				}
-				fields = fields.substring(0, fields.length()-2) + ")";
-				vals = vals.substring(0, vals.length()-2) + ")";
+				fields = fields.substring(0, fields.length() - 2) + ")";
+				vals = vals.substring(0, vals.length() - 2) + ")";
 				queries.add("INSERT INTO " + table + " " + fields + " VALUES " + vals + ";");
 
-				i ++;
+				i++;
 				str = str.substring(str.indexOf("}") + 1);
 			}
 
-			/*if (totalFields > 0 && totalFields < 99){
-				//db.execSQL("CREATE TABLE IF NOT EXISTS version (section VARCHAR, version INT);");
-				db.execSQL("DELETE FROM " + table + ";");
-				Log.e("QUERY", "DELETE FROM " + table + ";");
-				for (i = 0; i < totalFields; i ++){
-					//db.execSQL("INSERT INTO " + table + " VALUES ('" + keys[i] + "', " + values[i] + ");");
-					Log.e("QUERY", "INSERT INTO " + table + " VALUES ('" + keys[i] + "', " + values[i] + ");");
-				}
-			}
-			else{
-				result = false;
-			}*/
-
 		}
 		catch (Exception ex){
 			Log.e("saveTable", "Error parsing remote table " + table + ": " + ex.toString());
@@ -377,8 +391,8 @@ class Sync extends AsyncTask<Void, Void, Void> {
 		try {
 			int totalQueries = queries.size();
 			for (i = 0; i < totalQueries; i++) {
-				db.execSQL(queries.get(i));
 				Log.e("QUERY", queries.get(i));
+				db.execSQL(queries.get(i));
 			}
 		}
 		catch (Exception ex){
@@ -398,12 +412,9 @@ class Sync extends AsyncTask<Void, Void, Void> {
 
 		//Get preferences
 		SharedPreferences preferences = myContextRef.getSharedPreferences(GM.PREF, Context.MODE_PRIVATE);
-		SharedPreferences.Editor prefEditor;
-		prefEditor = preferences.edit();
 
 		//Get usefull data for the uri
 		String userCode = preferences.getString(GM.USER_CODE, "");
-		int dbVersion = preferences.getInt(GM.PREF_DB_VERSION, GM.DEFAULT_PREF_DB_VERSION);
 
 		//Get database. Stop if it's locked
 		SQLiteDatabase db = myContextRef.openOrCreateDatabase(GM.DB_NAME, Activity.MODE_PRIVATE, null);
@@ -412,6 +423,14 @@ class Sync extends AsyncTask<Void, Void, Void> {
 			return null;
 		}
 
+		//Get database version
+		Cursor cursor;
+		int dbVersion;
+		cursor = db.rawQuery("SELECT sum(version) AS v FROM version;", null);
+		cursor.moveToFirst();
+		dbVersion = cursor.getInt(0);
+		cursor.close();
+
 		URL url;
 		String uri = buildUrl(userCode, dbVersion, fg, GM.getLang());
 		try {
@@ -486,6 +505,7 @@ class Sync extends AsyncTask<Void, Void, Void> {
 			e.printStackTrace();
 		}
 
+		db.close();
 		return null;
     	
 	}