通过服务更新和通知JSON get请求的最佳方式

时间:2016-08-23 11:09:04

标签: java android okhttp3

从那以后,我一直在思考和压碎。但是,我对构建Android应用程序的最佳方法并不了解。

概念

我的应用程序通过OkHttp3获取JSON数组列表。响应后,应用程序将此列表放在适配器的列表视图中。我希望列表中的每个新项目都能通知我的用户。我想在后台编写一个服务,以便在应用程序消失时通知我的用户。

architecture my service

我需要一项服务来维持通知的流量(如facebook,twitter)。

这是问题之后。那么,如何正确地做到这一点?

我的项目类

public class ItemDevis implements Serializable {

private static final long serialVersionUID = 1L;

private int id;
private String name;
private String description;
private String picture;
private int price;
private int number;
private int millesime;
private int color;
private int status;

public ItemDevis(int id, String name, String description,
    int number, int millesime, int color, int status, int price) {
    this.id = id;
    this.name = name;
    this.millesime = millesime;
    this.color = color;
    this.description = description;
    this.status = status;
    this.number = number;
    this.price = price;
}
}

我的服务

public class NotifyService extends Service {

    private NotificationManager mNM;
    private int NOTIFICATION = R.string.notification;
    private boolean isRunning = false;
    static final int timer = 5000;

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

    @Override
    public void onCreate() {
        if (!isRunning) {
            mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        }
    }

    @Override
    public void onDestroy() {
        mNM.cancel(NOTIFICATION);
        isRunning = false;
        Toast.makeText(this, "Service done", Toast.LENGTH_SHORT).show();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (!isRunning) {
            isRunning = true;
            final Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    Log.d("DATA", "HTTP Request!");
                    // Check, if new item -> update view (if application is ready) + notify.
                    handler.postDelayed(this, timer);
                }
            }, timer);
        }
        return START_STICKY;
    }
}

您对此解决方案有何看法?

enter image description here

我的问题

  • 我应该使用SQLite吗?
  • 我应该使用ContentProvider吗?
  • SQLite在这种情况下效率更高吗?
  • 我应该查看我的架构吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

有多种方法可以满足您的要求。

  1. 在一段时间间隔后重复提供服务。当它在db上获得一个新数据存储时,以及显示通知(注意:是的,你必须在某处存储数据)。

  2. 在您的服务器上实施GCM。无论何时添加新内容,都会在接收到数据库中的第一个商店数据时向您的设备发送推送通知,然后检查应用是否已打开,然后只需更新视图,否则生成通知。

  3. 注意:无需使用内容提供商