【问题标题】:Can't get access to room db via onHandleIntent()无法通过 onHandleIntent() 访问房间数据库
【发布时间】:2021-01-31 15:10:36
【问题描述】:

我对编程和 android 很陌生,并尝试编写我的第一个应用程序。我想在手机重启后重新安排通知。当我试图访问数据库时,我坚持 onHandleIntent()。没有发生任何事情,也没有错误。

Event.class

@Entity(tableName = "event_table")
public class Event {
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "_id")
    Long id;

    @NonNull
    @ColumnInfo(name = "event_title")
    private String mEventTitle;

    @NonNull
    @ColumnInfo(name = "event_note")
    private String mEventNote;

    
    public Event(@NonNull String eventTitle, String eventNote) {
        this.mEventTitle = eventTitle;
        this.mEventNote = eventNote;
    }

    public String getEventTitle() {
        return this.mEventTitle;
    }

    public String getEventNote() {
        return this.mEventNote;
    }
}

DAO

@Dao
public interface EventDao {
    ...
    @Query("SELECT * FROM event_table")
    List<Event> alarmReschedule();
}

重新调度器

public class Rescheduler extends BroadcastReceiver {
   
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "publisher onReceive");

        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
            Intent i = new Intent(context, MyService.class);
            context.startService(i);
        }    
    }
}

我的服务

公共类 MyService 扩展 IntentService {

private static final String TAG = MyService.class.getSimpleName();

    public MyService(){
        super("MyService");
        Log.d(TAG, "constructor");
    }

我相信这里出了点问题 (onHandleIntent())。

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        Log.d(TAG, "onHandelIntent");
        EventRoomDatabase db = EventRoomDatabase.getDatabase(this);
        EventDao eventDao = db.eventDao();
        List<Event> notSended = eventDao.alarmReschedule();
        Log.d(TAG, "list size:" + notSended.size());

    //Retern list to other broadcastReceiver for reschedul notificatons
    //reternList(notSended);
    
    }

    @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
        return START_NOT_STICKY;
    }

    @Override
        public IBinder onBind(Intent intent) {
        return null;
    }

   /*reternList(){
    ...
    }*/
}

我将非常感谢您的任何帮助和建议。

【问题讨论】:

    标签: android service


    【解决方案1】:

    从此更改后一切正常:

    @Override
            public int onStartCommand(Intent intent, int flags, int startId) {
            return START_NOT_STICKY;
        }
    

    到那个:

    @Override
            public int onStartCommand(Intent intent, int flags, int startId) {
                super.onStartCommand(intent,flags, started);        
                return START_NOT_STICKY;
        }
    

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多