1
내 모든보기에는 사용자에게 알림이있는 경우 빨간색 점이있는 아이콘이있어서 일정한 (매 몇 분 간격) 폴링을 만들고 알림이 있는지 확인합니다 . @Subscrtibe
이 실행되지 않는 것을 제외하고. 내가 어쩌면 원인 일 것이라고 생각한 한 가지는 HomeActivity
이 등록되기 전에 게시를 시작하지만 타이머가 문제가 될 것이라고 생각하지 않는다는 것입니다. 사용자가 성공적으로 로그인하면Ottos 버스를 사용하여 '알림 폴링'
public class NotificationUtils {
private static Timer timer;
private static final int MINUTES = 1000 * 60;
private static Context applicationContext;
public static void startTask(Context context){
checkNotifications();
applicationContext = context;
timer = new Timer();
timer.schedule(task, 0L, MINUTES);
}
public static void killTask(){
timer.cancel();
timer.purge();
}
static TimerTask task = new TimerTask() {
@Override
public void run() {
checkNotifications();
}
};
private static void checkNotifications(){
RestInterface service = RestService.getRequestInstance(applicationContext);
Call<Boolean> call = service.hasNotificatrions(SessionUser.getInstance().getUser().getId());
call.enqueue(new Callback<Boolean>() {
@Override
public void onResponse(Call<Boolean> call, Response<Boolean> response) {
sendNotificationImage(response.body());
}
@Override
public void onFailure(Call<Boolean> call, Throwable t) {
Log.w("TimerTask", "Failed");
}
});
}
private static void sendNotificationImage(boolean hasUnreadNotifications){
if(hasUnreadNotifications) {
BusProvider.getInstance().post(R.drawable.notification_alert_icon);
} else {
BusProvider.getInstance().post(R.drawable.notification_icon);
}
}
}
, 나는 폴링을 시작 ...
public class LoginActivity extends AppCompatActivity {
....
successfulLogin(){
....
NotificationUtils.startTask(getApplicationContext());
}
}
그런 다음 내 HomeActivity 나는 추가 .. ..
public class HomeActivity extends AppCompatActivity {
....
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
BusProvider.getInstance().register(this);
}
....
@Subscribe
public void setNotification(int imageResource){
notificationButton.setImageResource(imageResource);
Log.w("HomeActivity", "Setting resource");
}
}
편집 클래스를 등록하고 가입 BusProvider 클래스
public final class BusProvider {
private static final Bus bus = new Bus();
public static Bus getInstance(){
return bus;
}
private BusProvider(){}
}
내가 그 놓친 믿을 수 없어! 고마워요, 이제 잘 작동합니다! – John