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