2016-04-20 16 views
0

Ich spare Aufgaben in SQlite-Datenbank. Diese Aufgaben haben einen Status.Anzahl der abgeschlossenen Aufgaben und ausstehende Aufgaben

Die Task-Tabelle hat eine Statusspalte, in der 0 für ausstehende Aufgaben und 1 für abgeschlossene Aufgaben steht.

Also dafür habe ich eine Abfrage erstellt, um abgeschlossene und ausstehende Aufgaben in Bezug auf den Status der Aufgabe zu erhalten.

Problem ist, ich bekomme keine richtige Anzahl von Aufgaben. Wenn ich eine Aufgabe mit Status als ausstehend, d. H. 0, habe, gibt sie auch 1 für beide Abfragen zurück, d. H. Sowohl für abgeschlossen als auch für ausstehend.

Ich habe einen Aufgabenhelfer erstellt und zwei verschiedene Abfragen erstellt, um die Anzahl der Aufgaben zu ermitteln. Später füge ich diese Zahl dem MPAndroidchart-Eintrag hinzu.

EDIT: Aufgabentabelle Helfer:

public class TaskTableHelper erweitert SQLiteOpenHelper {

private static final String TASK_TABLE = "taskTable"; 
private static final String KEY_TASK_TITLE = "taskTitle"; 
private static final String KEY_TASK_ID = "taskId"; 
private static final String KEY_TASK_ALERT_DATE = "taskAlertDate"; 
private static final String KEY_TASK_ALERT_TIME = "taskAlertTime"; 
private static final String KEY_DUE_DATE = "dueDate"; 
private static final String KEY_DUE_TIME = "dueTime"; 
private static final String KEY_TASK_LIST ="taskList"; 
private static final String KEY_TASK_STATUS = "taskStatus"; 

private static final String KEY_TASK_PRIORITY = "taskPriority"; 

private static int count=0; 

public TaskTableHelper(Context context) { 
    super(context, Constants.DATABASE_NAME, null, Constants.DATABASE_VERSION); 

} 

@Override 
public void onCreate(SQLiteDatabase db) { 
} 


// Upgrading database 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    db.execSQL("DROP TABLE IF EXISTS " + TASK_TABLE); 

    // createTable(db); 
    // onCreate(db); 
} 

public void addTask(Task task) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 

    values.put(KEY_TASK_TITLE, task.getTitle()); 
    values.put(KEY_TASK_PRIORITY, task.getTaskPriority()); 
    values.put(KEY_TASK_ALERT_DATE, task.getAlertDate()); 
    values.put(KEY_TASK_ALERT_TIME, task.getAlertTime()); 
    values.put(KEY_DUE_TIME, task.getDueTime()); 
    values.put(KEY_DUE_DATE, task.getDueDate()); 
    values.put(KEY_TASK_LIST, task.getList()); 
    values.put(KEY_TASK_STATUS, task.getStatus()); 

    db.insert(TASK_TABLE, null, values); 

    db.close(); 
} 

public Task getTask(int id) { 

    SQLiteDatabase db = this.getReadableDatabase(); 

    Task task = new Task(); 

    Cursor cursor = db.query(TASK_TABLE, new String[]{KEY_TASK_ID, 
        KEY_TASK_TITLE, KEY_TASK_PRIORITY, KEY_TASK_ALERT_DATE,KEY_TASK_ALERT_TIME, KEY_DUE_DATE, KEY_DUE_TIME, 
        KEY_TASK_LIST,KEY_TASK_STATUS}, KEY_TASK_ID + "=?", 
      new String[]{String.valueOf(id)}, null, null, null, null); 

    //cursor.moveToFirst(); 
    if(cursor != null && cursor.moveToFirst()) { 

     task = new Task(Integer.parseInt(cursor.getString(0)), 
       cursor.getString(1), Integer.parseInt(cursor.getString(2)),cursor.getString(3), 
       cursor.getString(4), cursor.getString(5), cursor.getString(6),Integer.parseInt(cursor.getString(7)), 
       Integer.parseInt(cursor.getString(8))); 
    } 

    return task; 
} 

public ArrayList<Task> getAllTask() { 
    ArrayList<Task> conList = new ArrayList<Task>(); 

    String selectQuery = "SELECT * FROM " + TASK_TABLE; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    if (cursor.moveToFirst()) { 
     do { 

      Task task = new Task(); 

      task.setId(Integer.parseInt(cursor.getString(0))); 
      task.setTitle(cursor.getString(1)); 
      task.setTaskPriority(Integer.parseInt(cursor.getString(2))); 
      task.setAlertDate(cursor.getString(3)); 
      task.setAlertTime(cursor.getString(4)); 
      task.setDueDate(cursor.getString(5)); 

      task.setDueTime(cursor.getString(6)); 
      task.setList(Integer.parseInt(cursor.getString(7))); 
      task.setStatus(Integer.parseInt(cursor.getString(8))); 

      conList.add(task); 
     } while (cursor.moveToNext()); 
    } 

    return conList; 
} 


public ArrayList<Task> getAllTask(int listId) { 
    ArrayList<Task> conList = new ArrayList<Task>(); 

    String selectQuery = "SELECT * FROM " + TASK_TABLE + " WHERE " + KEY_TASK_LIST + " == " + listId; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    if (cursor.moveToFirst()) { 
     do { 

      Task task = new Task(); 

      task.setId(Integer.parseInt(cursor.getString(0))); 
      task.setTitle(cursor.getString(1)); 
      task.setTaskPriority(Integer.parseInt(cursor.getString(2))); 
      task.setAlertDate(cursor.getString(3)); 
      task.setAlertTime(cursor.getString(4)); 
      task.setDueDate(cursor.getString(5)); 

      task.setDueTime(cursor.getString(6)); 
      task.setList(Integer.parseInt(cursor.getString(7))); 
      task.setStatus(Integer.parseInt(cursor.getString(8))); 

      conList.add(task); 
     } while (cursor.moveToNext()); 
    } 

    return conList; 
} 


public int getCompletedTasks() { 
    ArrayList<Task> conList = new ArrayList<Task>(); 

    String selectQuery = "SELECT * FROM " + TASK_TABLE + " WHERE " + KEY_TASK_STATUS + " = " + " 1 "; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor mCount= db.rawQuery(selectQuery,null); 

    if (mCount.moveToFirst()) { 
     do { 
      Task task = new Task(); 
      count = mCount.getInt(0); 
     } while (mCount.moveToNext()); 
    } 

    Log.d("query",selectQuery); 

    Log.d("count",String.valueOf(count)); 
    mCount.close(); 

    return count; 
} 

public int getPendingTasks() { 
    ArrayList<Task> conList = new ArrayList<Task>(); 

    String selectQuery = "SELECT * FROM " + TASK_TABLE + " WHERE " + KEY_TASK_STATUS + " = " + " 0 "; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor mCount= db.rawQuery(selectQuery,null); 

    if (mCount.moveToFirst()) { 
     do { 
      Task task = new Task(); 
      count = mCount.getInt(0); 
     } while (mCount.moveToNext()); 
    } 

    Log.d("query",selectQuery); 

    Log.d("count",String.valueOf(count)); 
    mCount.close(); 

    return count; 
} 

Haupttätigkeit:

private void setGraph() { 

    mBarChart = (HorizontalBarChart) findViewById(R.id.chart); 

    mBarChart.setScaleEnabled(false); 
    ArrayList<BarDataSet> dataSets = null; 

    ArrayList<Task> completedTasksList = new ArrayList<>(); 
    ArrayList<Task> pendingTasksList = new ArrayList<>(); 
    ArrayList<Integer> completedTask = new ArrayList<>(); 
    ArrayList<BarEntry> taskEntries = new ArrayList<>(); 

    int pendingTasks = mDb.getPendingTasks(); 
    int completedTasks = mDb.getCompletedTasks(); 


    taskEntries.add(new BarEntry(completedTasks,1)); 


     taskEntries.add(new BarEntry(pendingTasks,0)); 


    mBarChart.animateXY(2000, 2000); 


    ArrayList<String> xAxis = new ArrayList<>(); 
    xAxis.add("Pending"); 
    xAxis.add("Completed"); 


    BarDataSet completed = new BarDataSet(taskEntries, "Entries"); 

    } 

Was falsch ist hier los?

Vielen Dank.

+2

'==' funktioniert nicht in SQL-Abfragen. Verwenden Sie stattdessen '='. –

+0

Ich frage mich, warum "==" keinen SQL-Syntaxfehler verursacht ... – Fildor

+0

Nur eine Randbemerkung: In Ihren 'getXXXTask'-Methoden iterieren Sie den Cursor und erstellen' Task'-Instanzen, verwenden diese aber nie. Sie werden sofort außer Reichweite geraten ... Ich sehe deine Gründe nicht dahinter. – Fildor

Antwort

2
count = mCount.getInt(0); 

ist falsch, weil Sie das erste Feld in Ihrer rohen Hexe lesen, ist wahrscheinlich das ID-Feld. Verwendung dieses mCount.getCount();

+1

das auch funktioniert .. Danke .. @ androidLover – Sid

0

Ich schlage vor, eine kompilierte Anweisung, die einen schnelleren Weg zu zählen:

public long getCompletedTasks() { 
     SQLiteDatabase db = getWritableDatabase(); 
     long count = -1; 

     try { 
      SQLiteStatement statement = db.compileStatement(
       "select count(*) from table_name where status = 1"); 
      count = statement.simpleQueryForLong(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } finally { 
      if (statement != null) { 
       statement.close(); 
      } 
     } 

     return count; 
    } 

Auch, wenn Sie wissen, dass Sie verwenden diese Methode viel, können Sie die Anweisung Objekt-Cache und es wiederverwenden .

Verwandte Themen