小编All*_*e51的帖子

当 PagedList 获取新数据时收到通知

我遇到了与这里的问题相同的问题: 未收到 PagedList 更新通知

我所做的是为我的应用程序实现了分页库。我加载了一个数据列表,它可能非常大。Web 服务仅返回 20 个项目,使用密钥,您可以检索接下来的 20 个项目,依此类推。现在这很好用,adapter/recyclerview 显示前 20 个项目。一旦我向下滚动,就会加载新项目。问题是我需要知道何时加载新项目并需要对这些项目的引用。我需要将每个项目添加到列表顶部的地图视图中。如何在我的分页列表更改时收到通知?我尝试使用“addWeakCallback”,但我似乎不明白它是如何工作的。我希望每次加载数据时都会调用我在 ViewModel 上的观察者,但我的观察者甚至在数据加载之前就被触发。观察者被一个空列表触发,我只是将该列表提交给我的 PagedListAdapter。有人可以澄清这一切吗?我可以做些什么来观察我的 pagedList 的数据更改?

这是一些代码:

观察员

Observer<PagedList<Result>> resultObserver = new Observer<PagedList<Result>>() {
                    @Override
                    public void onChanged(@Nullable PagedList<Result> results) {
                        if (mResultAdapter == null) {
                            mResultAdapter= new ResultAdapter(getActivity());
                            mResultRecycler.setAdapter(mResultAdapter);
                            mResultAdapter.submitList(results);
                        }
                    }
                };
Run Code Online (Sandbox Code Playgroud)

视图模型

sourceFactory = new ResultDataSourceFactory(application.getApplicationContext());
PagedList.Config config = new PagedList.Config.Builder()
            .setEnablePlaceholders(false)
            .setPageSize(20)
            .setPrefetchDistance(5)
            .build();
resultList = new LivePagedListBuilder<>(sourceFactory, config).build();
Run Code Online (Sandbox Code Playgroud)

数据源

@Override
public void loadInitial(@NonNull LoadInitialParams<String> params, @NonNull final LoadInitialCallback<Result> callback) {
    Webservices.loadSearchResponse(url, new Response.Listener<String>() …
Run Code Online (Sandbox Code Playgroud)

android android-paging

6
推荐指数
1
解决办法
2098
查看次数

使用 SseEmitter 进行春季休息服务

当我调用服务器上的控制器时,我试图通知一个简单的 html 页面。我有一个 android 应用程序调用我的控制器,完成后我想通知我的网页控制器被调用。

这是我的一些代码:

    @RequestMapping("/user") 
public class UserController {

    /**
     * Returns user by id.
     * 
     * @param user IMEI
     * @return
     */
    @RequestMapping(value = "/{imei}", method = RequestMethod.GET)
    public User getUser(@PathVariable String imei) {

        User myUser = null;
        try {
            myUser = DbConnector.getUserWithImei(imei);
        } catch (Exception e) {
            System.out.println("Couldn't get user from database");
            e.printStackTrace();
        }
        SseEmitter emitter = new SseEmitter();
        try {
            emitter.send("Hallokes");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        emitter.complete();
        return …
Run Code Online (Sandbox Code Playgroud)

java rest spring android server-sent-events

5
推荐指数
1
解决办法
1万
查看次数