我正在制作学生时间表Android应用程序项目,我应该为特定时间段的特定日期的特定类设置警报。例如。操作系统是在星期一上午11点,然后警报应该在几分钟之前设置。为此我需要从一个到另一个活动发送3个意图用于发送日期,时间段和主题名称。我在下面的代码片段时遇到一些问题试图发送意图。
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
String subject = c.getString(c.getColumnIndex("subject"));
String day = c.getString(c.getColumnIndex("day"));
String slot1 = c.getString(c.getColumnIndex("7:30-9:10AM"));
String slot2 = c.getString(c.getColumnIndex("9:20-11:00AM"));
String slot3 = c.getString(c.getColumnIndex("11:10-12:50PM"));
String slot4 = c.getString(c.getColumnIndex("1:40-3:20PM"));
String slot5 = c.getString(c.getColumnIndex("3:30-5:00PM"));
TableRow tr1=new TableRow(viewtimetable.this);
tr1.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
TextView b=new TextView(viewtimetable.this);
b.setText(day);
b.setTextColor(Color.RED);
b.setTextSize(15);
tr1.addView(b);
TextView b1=new TextView(viewtimetable.this);
TextView b2=new TextView(viewtimetable.this);
TextView b3=new TextView(viewtimetable.this);
TextView b4=new TextView(viewtimetable.this);
TextView b5=new TextView(viewtimetable.this);
b1.setPadding(10, 0, 0, 0);
b1.setTextSize(15);
b1.setTextColor(Color.RED);
b2.setPadding(10, 0, 0, 0);
b2.setTextColor(Color.RED);
b2.setTextSize(15);
b3.setPadding(10, 0, 0, 0);
b3.setTextColor(Color.RED);
b3.setTextSize(15);
b4.setPadding(10, 0, 0, 0);
b4.setTextColor(Color.RED);
b4.setTextSize(15);
b5.setPadding(10, 0, 0, 0);
b5.setTextColor(Color.RED);
b5.setTextSize(15);
if(day.equals("Friday"))
{
if(slot1 != null){
b1.setText(slot1);
//Here's the main scene.I only want to send the intent if the above condition satisfies.
Intent intent = new Intent(getApplicationContext(),AlarmActivity.class);
intent.putExtra("Day",day);
intent.putExtra("Subject",subject);
startActivity(intent);
}
if(slot2 != null)
{
b2.setText(slot2);
}
if(slot3 != null)
{
b3.setText(slot3);
}
if(slot4 != null)
{
b4.setText(slot4);
}
if(slot5 != null)
{
b5.setText(slot5);
}
}
else if(day.equals("Monday"))
{
if(slot1 != null){
b1.setText(slot1);
}
if(slot2 != null)
{
b2.setText(slot2);
}
if(slot3 != null)
{
b3.setText(slot3);
}
if(slot4 != null)
{
b4.setText(slot4);
}
if(slot5 != null)
{
b5.setText(slot5);
}
}
else if(day.equals("Tuesday"))
{
if(slot1 != null){
b1.setText(slot1);
}
if(slot2 != null)
{
b2.setText(slot2);
}
if(slot3 != null)
{
b3.setText(slot3);
}
if(slot4 != null)
{
b4.setText(slot4);
}
if(slot5 != null)
{
b5.setText(slot5);
}
}
else if(day.equals("Wednesday"))
{
if(slot1 != null){
b1.setText(slot1);
}
if(slot2 != null)
{
b2.setText(slot2);
}
if(slot3 != null)
{
b3.setText(slot3);
}
if(slot4 != null)
{
b4.setText(slot4);
}
if(slot5 != null)
{
b5.setText(slot5);
}
}
else if(day.equals("Thursday"))
{
if(slot1 != null){
b1.setText(slot1);
}
if(slot2 != null)
{
b2.setText(slot2);
}
if(slot3 != null)
{
b3.setText(slot3);
}
if(slot4 != null)
{
b4.setText(slot4);
}
if(slot5 != null)
{
b5.setText(slot5);
}
}
else if(day.equals("Saturday"))
{
if(slot1 != null){
b1.setText(slot1);
}
if(slot2 != null)
{
b2.setText(slot2);
}
if(slot3 != null)
{
b3.setText(slot3);
}
if(slot4 != null)
{
b4.setText(slot4);
}
if(slot5 != null)
{
b5.setText(slot5);
}
}
tr1.addView(b1);
tr1.addView(b2);
tr1.addView(b3);
tr1.addView(b4);
tr1.addView(b5);
tv.addView(tr1);
问题
如果我喜欢上面的内容,它产生的例外是
couldn't read row 0,col -1 from CursowWindow.Make sure the cursor is initialized correctly before accessing data from it.
问题
我应该在代码片段中修改什么,以便我可以将意图发送到AlarmReceiver.class活动,并可以使用
检索String day = getIntent().getExtras().getString("Day");
String subject = getIntent().getExtras().getString("Subject");
PS
我也尝试使用SharedPreferences
,但抛出相同的异常。
解决方案
这是愚蠢的,但在我的查询中,我没有投射我在代码中使用的数据库列。有例外。
答案 0 :(得分:2)
您的例外是由于一些(可能是多个)电话:
c.getColumnIndex(columnName)
如果没有名为columnName
的列,则这些方法返回-1。因此,c.getString(-1)
会引发异常,因为-1
不是有效列。确保在查询过程中,这些列名称确实存在于数据库/ ContentProvider和投影中。
答案 1 :(得分:-1)
我认为你的光标是空的。 试试这个:
c.moveToFirst();
while(c.moveToNext()) {
Log.d("ClassName","Cursor is not empty");
rest of code
}