OSDN Git Service

improve the achievement class to set achievement
authoronuxy <n.nanatunoko@gmail.com>
Mon, 10 Sep 2012 17:39:02 +0000 (02:39 +0900)
committeronuxy <n.nanatunoko@gmail.com>
Mon, 10 Sep 2012 17:39:02 +0000 (02:39 +0900)
CUTEn/src/jp/ac/titech/sharp4k/cuten/Achievement.java
CUTEn/src/jp/ac/titech/sharp4k/cuten/LectureActivity.java

index 888280b..6022ba3 100644 (file)
@@ -1,5 +1,7 @@
 package jp.ac.titech.sharp4k.cuten;
 
+import java.util.ArrayList;
+
 import android.content.ContentValues;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
@@ -15,6 +17,12 @@ public class Achievement {
                submitted = 0;
        }
 
+       public Achievement(Task task, int[] result) {
+               this.task = task;
+               this.result = result;
+               submitted = 0;
+       }
+
        public Task getTask() {
                return task;
        }
@@ -50,6 +58,10 @@ public class Achievement {
                }
        }
 
+       public void setResult(int[] result) {
+               this.result = result;
+       }
+
        public void setSubmitted(boolean submitted) {
                if (submitted) {
                        this.submitted = 1;
@@ -58,6 +70,17 @@ public class Achievement {
                }
        }
 
+       public static ArrayList<Achievement> findNotSubmitted(SQLiteDatabase db) {
+               ArrayList<Achievement> ret = new ArrayList<Achievement>();
+               Cursor c = db.rawQuery("SELECT result,task_id" + " FROM achievements"
+                               + " WHERE submitted = ?", new String[] { String.valueOf(0) });
+               while (c.moveToNext()) {
+                       int taskId = c.getInt(1);
+                       ret.add(new Achievement(Task.find(db, taskId), c.getString(0)));
+               }
+               return ret;
+       }
+
        public long replace(SQLiteDatabase db) {
                ContentValues row = new ContentValues();
                row.put("task_id", getTask().getId());
@@ -67,6 +90,35 @@ public class Achievement {
                                SQLiteDatabase.CONFLICT_REPLACE);
        }
 
+       private int[] marge(int[] a, int[] b) {
+               if (a.length > b.length) {
+                       return marge(b, a);
+               }
+               for (int i = 0; i < a.length; i++) {
+                       if (b[i] < a[i]) {
+                               b[i] = a[i];
+                       }
+               }
+               return b;
+       }
+
+       public boolean marge(SQLiteDatabase db) {
+               Cursor c = db.rawQuery("SELECT result" + " FROM achievements"
+                               + " WHERE task_id = ?",
+                               new String[] { String.valueOf(task.getId()) });
+               if (c.moveToNext()) {
+                       Achievement old = new Achievement(task, c.getString(0));
+                       int[] res = marge(old.result, result);
+                       this.result = res;
+                       this.replace(db);
+                       return true;
+               } else {
+                       // not found
+                       this.replace(db);
+                       return false;
+               }
+       }
+
        public static Achievement find(SQLiteDatabase db, Task task) {
                Cursor c = db.rawQuery("SELECT result" + " FROM achievements"
                                + " WHERE task_id = ?",
index ccacd3f..a9e64c4 100644 (file)
@@ -81,6 +81,10 @@ public class LectureActivity extends BaseMenuActivity implements
                        }
                        checkExistingAll();
                }
+               List<Achievement> l = Achievement.findNotSubmitted(db);
+               for (Achievement a : l) {
+                       Toast.makeText(this, a.toString(), Toast.LENGTH_SHORT).show();
+               }
                db.close();
        }
 
@@ -136,6 +140,12 @@ public class LectureActivity extends BaseMenuActivity implements
                                Toast.makeText(this, "閉じるボタンで戻って下さい><", Toast.LENGTH_LONG)
                                                .show();
                        } else {
+                               SQLiteOpenHelper h = new SQLHelper(this);
+                               final SQLiteDatabase db = h.getReadableDatabase();
+                               int[] test = { result };
+                               Achievement a = new Achievement(task, test);
+                               a.marge(db);
+                               db.close();
                                Toast.makeText(this, "結果は" + result + "だよっ!", Toast.LENGTH_LONG)
                                                .show();
                        }