在我的Android应用程序中,我有一个SQLite数据库,用于存储学生成绩信息。我能够正确阅读成绩类别,但出于某种原因,当我尝试阅读成绩时,resCurs.getInt(gradeIndex)每次都返回0,即使我的数据库中的成绩值显然不是0。任何帮助我非常感激,因为我发现我的代码没有错误
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
}
}
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;
}
}