如何观察Web服务的变化并使用RxAndroid更新ui?

时间:2016-02-14 15:03:55

标签: android android-volley rx-java rx-android

我想要实现的是能够观察我的Web服务中的更改,然后在有任何更改时更新我的​​textview。我目前正在使用计时器来实现这一点,每隔x秒运行一次。但问题是内存泄漏所以它不是一个好的解决方案。现在我偶然发现了这个rxjava / rxjava,但我对如何使用它很困惑。文档让我感到困惑,我找不到很多关于此的教程。顺便说一下,我正在使用凌空从我的网络服务中获取数据。

这是Observable,有人在我的另一个问题上回答了但是我在返回sendRequest时遇到了“不兼容类型”的错误。

Observable.interval(500, TimeUnit.MILLISECONDS, Schedulers.io()).map(new Func1<Long, Object>() {
        @Override
        public Object call(Long tick) {
            return sendRequest();
        }
    }).observeOn(AndroidSchedulers.mainThread()).subscribe();

这是我的截击请求代码

public void sendRequest(){

    //While the app fetched data we are displaying a progress dialog
    //final ProgressDialog loading = ProgressDialog.show(this,"Fetching Data","Please wait...",false,false);

    StringRequest stringRequest = new StringRequest(JSON_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    //text.setText(response);

                    //loading.dismiss();
                    showJSON(response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_LONG).show();
                }
            });

    RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
    requestQueue.add(stringRequest);
}

private void showJSON(String json){
    ParseJson pj = new ParseJson(json);
    pj.parseJSON();
    text.setText(ParseJson.playing[0]);
}

2 个答案:

答案 0 :(得分:0)

您的方法sendRequest不会返回任何内容(void)。您可以返回null或其他内容。

@Override
public Object call(Long tick) {
  sendRequest();
  return null;
}

我建议你先阅读Java basics而不是编写Android应用程序。

答案 1 :(得分:0)

使用推送通知在数据更新时将消息从服​​务器发送给用户,并避免向服务器发送不需要的请求。

然后,您可以仅在收到通知时发送新数据请求,并稍后更新Observer,可能使用rx主题,或者更好地将数据存储在SQLite表中并观察数据库中的更改。

建议这个从sqlite创建一个rx流 https://github.com/square/sqlbrite

GCM:https://developers.google.com/cloud-messaging/