我想要实现的是能够观察我的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]);
}
答案 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