bugfix for batch-insert in HomeFragment.java, addeed development helper class SqlDebugHelper.java

This commit is contained in:
Lukas Zielinski committed 2014-11-18 12:27:48 +01:00
1 parent 119a8f1664
commit 075054e3b1
3 files changed
+111 -11

No files matched your search

@@ -13,6 +13,7 @@ import android.view.MenuItem;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.tracking.app.R;
import com.sap.sailing.android.tracking.app.utils.AppPreferences;
import com.sap.sailing.android.tracking.app.utils.SqlDebugHelper;
public class BaseActivity extends ActionBarActivity {
private static final String TAG = SendingServiceAwareActivity.class.getName();
@@ -22,6 +23,9 @@ public class BaseActivity extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prefs = new AppPreferences(this);
// TODO: Remove debug string
SqlDebugHelper.dumpAllTablesToConsole(this);
}
@Override
@@ -53,6 +53,7 @@ import com.sap.sailing.android.tracking.app.provider.AnalyticsContract;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Competitor;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Event;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Leaderboard;
import com.sap.sailing.android.tracking.app.provider.AnalyticsProvider;
import com.sap.sailing.android.tracking.app.ui.activities.RegattaActivity;
import com.sap.sailing.android.tracking.app.utils.AppPreferences;
import com.sap.sailing.android.tracking.app.utils.CheckinQRCodeHelper;
@@ -424,17 +425,31 @@ public class HomeFragment extends BaseFragment implements
private void checkInWithAPIAndDisplayTrackingActivity(CheckinData checkinData) {
if (eventLeaderboardCompetitorCombnationAvailable(checkinData.eventId,
checkinData.leaderboardName, checkinData.competitorId)) {
ContentResolver cr = getActivity().getContentResolver();
ArrayList<ContentProviderOperation> opList = new
ArrayList<ContentProviderOperation>();
// inserting leaderboard first in order to get the ID.
// This should be atomic, but couldn't get withValueBackReference to work yet.
ContentResolver cr = getActivity().getContentResolver();
ContentValues clv = new ContentValues();
clv.put(Leaderboard.LEADERBOARD_NAME, checkinData.leaderboardName);
clv.put(BaseColumns._ID, 0);
cr.insert(Leaderboard.CONTENT_URI, clv);
opList.add(ContentProviderOperation.
newInsert(Leaderboard.CONTENT_URI).withValues(clv).build());
Cursor cur = cr.query(Leaderboard.CONTENT_URI, null, null, null, null);
long lastLeaderboardId = 0;
if (cur.moveToLast())
{
lastLeaderboardId = cur.getLong(cur.getColumnIndex(BaseColumns._ID));
}
cur.close();
// now, with the leaderboard id, insert event and competitor
// todo: fix this so its atomic.
ArrayList<ContentProviderOperation> opList = new
ArrayList<ContentProviderOperation>();
ContentValues cev = new ContentValues();
cev.put(Event.EVENT_ID, checkinData.eventId);
@@ -443,10 +458,10 @@ public class HomeFragment extends BaseFragment implements
cev.put(Event.EVENT_DATE_END, Long.parseLong(checkinData.eventEndDateStr));
cev.put(Event.EVENT_SERVER, checkinData.eventServerUrl);
cev.put(Event.EVENT_IMAGE_URL, checkinData.eventFirstImageUrl);
cev.put(Event.EVENT_LEADERBOARD_FK, 0);
cev.put(Event.EVENT_LEADERBOARD_FK, lastLeaderboardId);
opList.add(ContentProviderOperation.
newInsert(Event.CONTENT_URI).withValues(cev).withValueBackReference(Event.EVENT_LEADERBOARD_FK, 0).build());
newInsert(Event.CONTENT_URI).withValues(cev).build());
ContentValues ccv = new ContentValues();
@@ -455,12 +470,17 @@ public class HomeFragment extends BaseFragment implements
ccv.put(Competitor.COMPETITOR_ID, checkinData.competitorId);
ccv.put(Competitor.COMPETITOR_NATIONALITY, checkinData.competitorNationality);
ccv.put(Competitor.COMPETITOR_SAIL_ID, checkinData.competitorSailId);
ccv.put(Competitor.COMPETITOR_LEADERBOARD_FK, 0);
ccv.put(Competitor.COMPETITOR_LEADERBOARD_FK, lastLeaderboardId);
opList.add(ContentProviderOperation.
newInsert(Competitor.CONTENT_URI).withValues(ccv).withValueBackReference(Competitor.COMPETITOR_LEADERBOARD_FK, 0).build());
newInsert(Competitor.CONTENT_URI).withValues(ccv).build());
try {
for (ContentProviderOperation op: opList)
{
System.out.println("** INSERT: " + op);
}
cr.applyBatch(AnalyticsContract.CONTENT_AUTHORITY, opList);
} catch (RemoteException e1) {
ExLog.e(getActivity(), TAG, "Batch insert failed: " + e1.getMessage());
@@ -0,0 +1,76 @@
package com.sap.sailing.android.tracking.app.utils;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.provider.BaseColumns;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Competitor;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Event;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Leaderboard;
public class SqlDebugHelper {
static final public String TAG = SqlDebugHelper.class.getName();
public static void dumpAllTablesToConsole(Context context)
{
ExLog.w(context, TAG, "--- PRINT ALL SQL" );
ExLog.w(context, TAG, "+++ LEADERBOARDS +++");
ContentResolver cr = context.getContentResolver();
Cursor c1 = cr.query(Leaderboard.CONTENT_URI, null, null, null, null);
while (c1.moveToNext())
{
StringBuffer sb = new StringBuffer();
sb.append("_ID: " + c1.getString(c1.getColumnIndex(BaseColumns._ID)) + ", ");
sb.append("NAME: " + c1.getString(c1.getColumnIndex(Leaderboard.LEADERBOARD_NAME)) + "\n");
ExLog.w(context, TAG, "Leaderboard: " + sb.toString());
}
ExLog.w(context, TAG, "+++ EVENTS +++");
c1.close();
Cursor c2 = cr.query(Event.CONTENT_URI, null, null, null, null);
while (c2.moveToNext())
{
StringBuffer sb = new StringBuffer();
sb.append("_ID: " + c2.getString(c2.getColumnIndex(BaseColumns._ID)) + ", ");
sb.append("ID: " + c2.getString(c2.getColumnIndex(Event.EVENT_ID)) + ", ");
sb.append("NAME: " + c2.getString(c2.getColumnIndex(Event.EVENT_NAME)) + ", ");
sb.append("DATE START: " + c2.getString(c2.getColumnIndex(Event.EVENT_DATE_START)) + ", ");
sb.append("DATE END: " + c2.getString(c2.getColumnIndex(Event.EVENT_DATE_END)) + ", ");
sb.append("IMAGE-URL: " + c2.getString(c2.getColumnIndex(Event.EVENT_IMAGE_URL)) + ", ");
sb.append("SERVER: " + c2.getString(c2.getColumnIndex(Event.EVENT_SERVER)) + "\n");
ExLog.w(context, TAG, "Event: " + sb.toString());
}
ExLog.w(context, TAG, "+++ COMPETITORS +++");
c2.close();
Cursor c3 = cr.query(Competitor.CONTENT_URI, null, null, null, null);
while (c3.moveToNext())
{
StringBuffer sb = new StringBuffer();
sb.append("_ID: " + c3.getString(c3.getColumnIndex(BaseColumns._ID)) + ", ");
sb.append("ID: " + c3.getString(c3.getColumnIndex(Competitor.COMPETITOR_ID)) + ", ");
sb.append("DISPLAY NAME: " + c3.getString(c3.getColumnIndex(Competitor.COMPETITOR_DISPLAY_NAME)) + ", ");
sb.append("NATIONALITY: " + c3.getString(c3.getColumnIndex(Competitor.COMPETITOR_NATIONALITY)) + ", ");
sb.append("COUNTRY CODE: " + c3.getString(c3.getColumnIndex(Competitor.COMPETITOR_COUNTRY_CODE)) + ", ");
sb.append("SAIL-ID: " + c3.getString(c3.getColumnIndex(Competitor.COMPETITOR_SAIL_ID)) + "\n");
ExLog.w(context, TAG, "Competitor: " + sb.toString());
}
c3.close();
ExLog.w(context, TAG, "--- END OF SQL PRINTOUT" );
}
}