You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Backendless查询数据库仅返回1条结果,Android端如何遍历获取全部数据

解决方案

先做基础排查:

  • 登录Backendless控制台,进入存储数据的VIdeos表,手动输入查询条件name != 'Bill'执行查询,确认符合条件的总条目数,如果总数本身就是1,代码返回结果属于正常情况,无需修改。
  • 如果控制台查询符合条件的条目数大于1,参考以下方法实现全量遍历:

Backendless的find接口默认采用分页返回数据,你当前设置了单页返回10条、偏移量为0,仅会拉取第一页的数据。要拉取所有符合条件的条目,需要循环拉取每一页的数据直到返回结果为空。

修改后的代码示例

package com.mbass.examples;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.backendless.Backendless;
import com.backendless.async.callback.AsyncCallback;
import com.backendless.exceptions.BackendlessFault;
import com.backendless.persistence.DataQueryBuilder;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {
    private TextView status;
    private Button updateButton;
    List<VIdeos> allVideos = new ArrayList<>();
    // 单页拉取数量,Backendless免费版单页上限为100,可根据需求调整
    private static final int PAGE_SIZE = 20;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);

        Backendless.setUrl(Defaults.SERVER_URL);
        Backendless.initApp(getApplicationContext(), Defaults.APPLICATION_ID, Defaults.API_KEY);

        status = findViewById(R.id.status);
        updateButton = findViewById(R.id.update_button);
        updateButton.setEnabled(false);

        String whereClause = "name != 'Bill'";
        DataQueryBuilder queryBuilder = DataQueryBuilder.create();
        queryBuilder.setWhereClause(whereClause);
        queryBuilder.setPageSize(PAGE_SIZE).setOffset(0);
        queryBuilder.setSortBy("name");

        // 递归拉取所有页数据
        queryAllVideos(queryBuilder);
    }

    private void queryAllVideos(DataQueryBuilder queryBuilder) {
        Backendless.Persistence.of(VIdeos.class).find(queryBuilder, new AsyncCallback<List<VIdeos>>() {
            @Override
            public void handleResponse(List<VIdeos> response) {
                if (response.isEmpty()) {
                    // 所有数据拉取完成,遍历所有结果
                    for (VIdeos video : allVideos) {
                        Toast.makeText(MainActivity.this, "Name: " + video.getName() + "\n" +
                                "ID: " + video.getCreated(), Toast.LENGTH_SHORT).show();
                    }
                    return;
                }
                // 把当前页数据加入总列表
                allVideos.addAll(response);
                // 更新偏移量,拉取下一页
                queryBuilder.setOffset(queryBuilder.getOffset() + PAGE_SIZE);
                queryAllVideos(queryBuilder);
            }

            @Override
            public void handleFault(BackendlessFault fault) {
                Toast.makeText(MainActivity.this, fault.getMessage(), Toast.LENGTH_LONG).show();
            }
        });
    }
}

额外注意事项

  • 你定义的类名是VIdeos(首字母V和I均为大写),需要确认和Backendless控制台里的表名完全一致,Backendless表名大小写敏感,如果表名不匹配也可能出现返回结果异常的问题。
  • 如果你的数据量超过1000条,Backendless免费版有查询次数和返回数据量限制,建议结合业务场景添加必要的过滤条件,避免全表拉取占用过多配额。

内容的提问来源于stack exchange,提问作者David A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:15:05