samedi 25 avril 2015

Reading integers from SQLite database returns 0?


In my Android application, I have an SQLite database that stores a students grade information. I am able to read in the category of the grade correctly but for some reason when i try to read in the grade itself resCurs.getInt(gradeIndex) returns 0 every time even though the grade value in my database is clearly not 0. Any help would be greatly appreciated as I see nothing wrong with my code

GradeDBOpenHelper.java

package bcs421.jorgeramirez.hwk.gradeapp.adv;

 import android.content.Context;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 import android.database.sqlite.SQLiteOpenHelper;

 public class GradeDBOpenHelper extends SQLiteOpenHelper {

public static final String DATABASE_NAME = "GradeData.db";
public static final String DATABASE_TABLE = "GradeData";
public static final int DATABASE_VERSION = 1;

public static final String KEY_ID = "_id";
public static final String COLUMN_CAT = "category";
public static final String COLUMN_NUM = "itemnumber";
public static final String COLUMN_DESC = "description";
public static final String COLUMN_GRD = "grade";
public static final String COLUMN_DATE = "date";

static final String DATABASE_CREATE =
        "CREATE TABLE " + DATABASE_TABLE +  "(" + 
        KEY_ID + " integer primary key autoincrement, " +
        COLUMN_CAT + " varchar(20), " +
        COLUMN_NUM + " integer, " +
        COLUMN_DESC + " varchar(255), " +
        COLUMN_GRD + " integer, " +
        COLUMN_DATE + " varchar(255));";

private static final String STUDENT_SELECT =
        "SELECT * FROM " + DATABASE_TABLE + ";";

static final String GRADE_INSERT_1 =
        "INSERT INTO " + DATABASE_TABLE + " VALUES (NULL, 'Homework', 1, 'Assigment 1 - Schedule App', 100, '02/10/2015');";

static final String GRADE_INSERT_2 =
        "INSERT INTO " + DATABASE_TABLE + " VALUES (NULL, 'Quiz', 1, 'Quiz - Syllabus', 100, '02/10/2015');";

static final String GRADE_INSERT_3 =
        "INSERT INTO " + DATABASE_TABLE + " VALUES (NULL, 'Lab', 1, 'Lab Ch1 - Hello Yankees', 100, '01/28/2015');";

static final String GRADE_INSERT_4 =
        "INSERT INTO " + DATABASE_TABLE + " VALUES (NULL, 'Lab', 2, 'Lab - Hello World', 100, '02/04/2015');";

static final String GRADE_INSERT_5 =
        "INSERT INTO " + DATABASE_TABLE + " VALUES (NULL, 'Lab', 3, 'Lab - Manifest and Different Screens', 0, '02/09/2015');";







public GradeDBOpenHelper(Context context, String name, CursorFactory factory, int version) {
    super(context, name, factory, version);

}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(DATABASE_CREATE);
    db.execSQL(GRADE_INSERT_1);
    db.execSQL(GRADE_INSERT_2);
    db.execSQL(GRADE_INSERT_3);
    db.execSQL(GRADE_INSERT_4);
    db.execSQL(GRADE_INSERT_5);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

}


}

GradeContentProvider.java

 package bcs421.jorgeramirez.hwk.gradeapp.adv;

 import android.content.ContentProvider;
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.UriMatcher;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteQueryBuilder;
 import android.net.Uri;

 public class GradeContentProvider extends ContentProvider {


private GradeDBOpenHelper gradeDatabase;

public static final Uri CONTENT_URI = Uri.parse("content://bcs421.jorgeramirez.hwk.gradeapp");

private static final int ALLROWS = 1;
private static final int SINGLE_ROW = 2;

private static final UriMatcher uriMatcher;
static {
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    uriMatcher.addURI("bcs421.jorgeramirez.hwk.gradeapp", "locations", ALLROWS);
    uriMatcher.addURI("bcs421.jorgeramirez.hwk.gradeapp/#", "locations", SINGLE_ROW);
}


@Override
public boolean onCreate() {
    //*******************************************
    // Construct the underlying database.
    // It will defer opening the datbase until you need to
    // perform a query or transaction. 
    //*******************************************

    this.gradeDatabase = new GradeDBOpenHelper(getContext(),
            GradeDBOpenHelper.DATABASE_NAME, null,
            GradeDBOpenHelper.DATABASE_VERSION);

    return true;
}

@Override
public Cursor query(Uri uri, String[] projection, String selection,
        String[] selectionArgs, String sortOrder) {
    SQLiteDatabase db = this.gradeDatabase.getReadableDatabase();

    String groupBy = null;
    String having = null;

    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    queryBuilder.setTables(GradeDBOpenHelper.DATABASE_TABLE);

    switch (uriMatcher.match(uri)) {
        case SINGLE_ROW:
            String rowID = uri.getPathSegments().get(1);
            queryBuilder.appendWhere(GradeDBOpenHelper.KEY_ID + " = " + rowID);
            break;
        default:
            break;
    }

    Cursor cursor = queryBuilder.query(db, projection, selection, selectionArgs, groupBy, having, sortOrder);
    return cursor;
}

@Override
public String getType(Uri uri) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public Uri insert(Uri uri, ContentValues values) {
    SQLiteDatabase db;

    db = this.gradeDatabase.getWritableDatabase();

    // Actually insert the new zip in the DB
    long id = db.insert(GradeDBOpenHelper.DATABASE_TABLE, null, values);

    if (id > -1)
    {
        // Construct and return the URI of the newly inserted row
        Uri insertId = ContentUris.withAppendedId(CONTENT_URI, id);
        // VERY IMPORTANT!!
        // Notify and observers of the change in the data set
        getContext().getContentResolver().notifyChange(insertId, null);

        return insertId;
    }
    return null;
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public int update(Uri uri, ContentValues values, String selection,
        String[] selectionArgs) {
    // TODO Auto-generated method stub
    return 0;
 }

 }

MainActivity.java

 package bcs421.jorgeramirez.hwk.gradeapp.adv;

 import android.app.Activity;
 import android.content.ContentResolver;
 import android.content.Intent;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.TextView;

 public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String[] projection = { GradeDBOpenHelper.KEY_ID,
            GradeDBOpenHelper.COLUMN_CAT,
            GradeDBOpenHelper.COLUMN_NUM,
            GradeDBOpenHelper.COLUMN_DESC,
            GradeDBOpenHelper.COLUMN_GRD,
            GradeDBOpenHelper.COLUMN_DATE
    };

    // Get the content resolver
    ContentResolver cr = getContentResolver();

    // Query the ContentProvider using the ContentResolver
    Uri targetUri = Uri.parse("content://bcs421.jorgeramirez.hwk.gradeapp");
    Cursor resultCursor = cr.query(targetUri, projection, null, null, null);


    TextView numGrade = (TextView)findViewById(R.id.numGrade);
    String numG = Double.toString(calcAverage(resultCursor));
    numGrade.setText(numG);

    Button viewGradeList = (Button)findViewById(R.id.viewGradesButton);
    viewGradeList.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, GradeListActivity.class);
            startActivity(intent);

        }

    });




}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

public double calcAverage (Cursor resCurs)
{
    int hwkSum = 0, examSum = 0, labSum = 0, quizSum = 0;
    int hwkCnt = 0, examCnt = 0, labCnt = 0, quizCnt = 0;
    double hwkAvg = 0, examAvg = 0, labAvg = 0, quizAvg = 0;
    double hwkPortion, examPortion, labPortion, quizPortion;
    double totAverage;

    int categoryIndex = resCurs.getColumnIndex(GradeDBOpenHelper.COLUMN_CAT);
    int gradeIndex = resCurs.getColumnIndex(GradeDBOpenHelper.COLUMN_GRD);
    String category;
    int gd;

    while (resCurs.moveToNext())
    {
        category = resCurs.getString(categoryIndex);
        gd = resCurs.getInt(gradeIndex);
        switch (category)
        {
        case "Homework":
            hwkSum = hwkSum + gd;
            ++hwkCnt;
            break;
        case "Exam":
            examSum = examSum + gd;
            ++examCnt;
            break;
        case "Lab":
            labSum = labSum + gd;
            ++labCnt;
            break;
        case "Quiz":
            quizSum = quizSum + gd;
            ++quizCnt;
            break;
        default:
            break;
        }
    }

    if (hwkCnt != 0)
    {
        hwkAvg = hwkSum/hwkCnt;
    }
    if(examCnt != 0)
    {
        examAvg = examSum/examCnt;
    }
    if(labCnt != 0)
    {
        labAvg = labSum/labCnt;
    }
    if(quizCnt != 0)
    {
        quizAvg = quizSum/quizCnt;
    }

    hwkPortion = hwkAvg * .35;
    examPortion = examAvg * .50;
    labPortion = labAvg * .05;
    quizPortion = quizAvg * .10;

    totAverage = hwkPortion + examPortion + labPortion + quizPortion;

    return totAverage;

 }
 }


Aucun commentaire:

Enregistrer un commentaire