2013-09-28 2 views
0

잠시 동안이 문제에 봉착했습니다.다중 데이터베이스 용 브로드 캐스트 수신기

여러 데이터베이스 커서가있는 브로드 캐스트 수신기에 대한 좋은 예가 있습니까?

문제 : 저는 PagerTabStrip을 구현했으며 BroadCast 수신기와 알림 알림을 구현했습니다.

그래서 장치 화면에서 알림을 클릭하면 첫 번째 커서 만 열립니다. 다른 커서도 열리지 않습니다 .. 나는 커서 커서를 닫았습니다.

이 내용은 공백없이 원하는 공백을 열 수 있습니다.

public class ReminderService extends WakeReminderIntentService{ 

public ReminderService(){ 
    super("ReminderService"); 
} 

@SuppressWarnings("deprecation") 
void doReminderWork(Intent intent){ 
    Log.d("ReminderService", "Doing work."); 
    Long rowId = intent.getExtras().getLong(TaskDatabase.KEY_ROWID); 

    NotificationManager mgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 

    Intent notificationIntent = new Intent(this, TaskEdit.class); 
    notificationIntent.putExtra(TaskDatabase.KEY_ROWID, rowId); 

    PendingIntent pi = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_ONE_SHOT); 

/// 나머지 CODE.

브로드 캐스트 리시버가 장소에 당신의 질문의 이해를

public void onReceive(Context context, Intent intent){ 
    ReminderManager reminderMgr = new ReminderManager(context); 

    TaskDatabase dbHelper = new TaskDatabase(context); 
    dbHelper.open(); 
    Cursor cursor = dbHelper.fetchAllGeneralRemindersByDefault(); 
    if(cursor != null){ 

     cursor.moveToFirst(); 
     int rowIdColumnIndex = cursor.getColumnIndex(TaskDatabase.KEY_ROWID); 
     int dateTimeColumnIndex = cursor.getColumnIndex(TaskDatabase.KEY_DATE_TIME); 

     while(cursor.isAfterLast() == false){ 
      Log.d(TAG, "Adding alarm from boot."); 
      Log.d(TAG, "Row Id Column Index - " + rowIdColumnIndex); 
      Log.d(TAG, "Date Time Column Index - " + dateTimeColumnIndex); 

      Long rowId = cursor.getLong(rowIdColumnIndex); 
      String dateTime = cursor.getString(dateTimeColumnIndex); 

      Calendar cal = Calendar.getInstance(); 
      SimpleDateFormat format = new SimpleDateFormat(TaskEdit.DATE_TIME_FORMAT); 
      try{ 
       java.util.Date date = format.parse(dateTime); 
       cal.setTime(date); 

       reminderMgr.setReminder(rowId, cal); 
      }catch(java.text.ParseException e){ 
       Log.e("OnBootReceiver", e.getMessage(), e); 
      } 
      cursor.moveToNext(); 
     } 
+0

문제가 무엇입니까? – cYrixmorten

+0

질문이 업데이트 됨 –

+0

알림을 처리하는 코드를 표시 할 수 있습니까? – cYrixmorten

답변

0

(이 클래스는 커서를 얻을 수), 나는 fetchAllGeneralRemindersByDefault에 오류가 꽤 확신(). 빈 커서가 반환됩니다. 이것이 코드 또는 데이터베이스가 비어있는 경우입니다. 말할 수 없습니다. 코드 리팩토링

제안 :

public void onReceive(Context context, Intent intent){ 
ReminderManager reminderMgr = new ReminderManager(context); 

TaskDatabase dbHelper = new TaskDatabase(context); 
dbHelper.open(); 
// returns an empty cursor at index -1 (that is normal behaviour for cursors) 
Cursor cursor = dbHelper.fetchAllGeneralRemindersByDefault(); 
if(cursor != null && cursor.size() > 0){ // added check 

    int rowIdColumnIndex = cursor.getColumnIndex(TaskDatabase.KEY_ROWID); 
    int dateTimeColumnIndex = cursor.getColumnIndex(TaskDatabase.KEY_DATE_TIME); 

    // when you called moveToNext on the empty cursor 
    // it corresponds to calling list.get(0) on an empty ArrayList 
    while(cursor.moveToNext()){ 
     Log.d(TAG, "Adding alarm from boot."); 
     Log.d(TAG, "Row Id Column Index - " + rowIdColumnIndex); 
     Log.d(TAG, "Date Time Column Index - " + dateTimeColumnIndex); 

     Long rowId = cursor.getLong(rowIdColumnIndex); 
     String dateTime = cursor.getString(dateTimeColumnIndex); 

     Calendar cal = Calendar.getInstance(); 
     SimpleDateFormat format = new SimpleDateFormat(TaskEdit.DATE_TIME_FORMAT); 
     try{ 
      java.util.Date date = format.parse(dateTime); 
      cal.setTime(date); 

      reminderMgr.setReminder(rowId, cal); 
     }catch(java.text.ParseException e){ 
      Log.e("OnBootReceiver", e.getMessage(), e); 
     } 
    } 
} else { 
    Log.e("OnBootReceiver", "fetchAllGeneralRemindersByDefault() returned empty cursor"); 
} 
} 
+0

안녕하세요, 마침내 알아 냈습니다. 데이터베이스에 오류가 없었습니다. 내가 완벽하게 작업 한 코드가 무엇이든, 나는 Intent를 통해 가치를 전달했으며 효과가있었습니다. 이 문제는 복잡했기 때문에 내가 한 것보다 더 잘 설명 할 수 없었습니다. 그러나 당신의 노력과 시간에 감사드립니다. 감사합니다 –

+0

당신은 환영합니다 :-) – cYrixmorten

관련 문제