EOS Table 数据整理 (RPC get_table_rows)

本文介绍EOS区块链中RPC接口返回的table数据结构及内容,涵盖了producers、global、voters、delband等关键节点的数据详情,为理解EOS网络状态提供深入视角。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://eosfans.io/topics/926

一份RPC接口返回的table数据

table

  1. producers 节点
  2. global
  3. voters 投票
  4. delband 账户抵押
  5. rammarket  ram 市场信息
  6. refunds 账户赎回情况
  7. namebids 账户竞拍情况
  8. userres 除了通过账号信息来获取账号的CPU和NET抵押情况,还有账号内存的总量
params: {
  json: true,
  code: "eosio",
  scope: "eosio",
  table: "userres",
  limit: 100,
  lower_bound: 0,
  uppper_bound: -1
}

1. producers

rows: [{

  is_active:1
  last_claim_time:"1529459862000000"
  location:0
  owner:"123singapore"
  producer_key:"EOS71UbkZzuz55WNBpsEVQzkXrZAJ2XyLoQiEcS9WKwbYambhFxWb"
  total_votes:"11657009543757334.00000000000000000"
  unpaid_blocks:0
  url:"http://eos.vote"

}]

2. global

rows: [{
    base_per_transaction_net_usage:12
    context_free_discount_net_usage_den:100
    context_free_discount_net_usage_num:20
    deferred_trx_expiration_window:600
    last_name_close:"2000-01-01T00:00:00.000"
    last_pervote_bucket_fill:"1529491544000000"
    last_producer_schedule_size:21
    last_producer_schedule_update:"2018-06-20T11:11:40.000"
    max_authority_depth:6
    max_block_cpu_usage:200000
    max_block_net_usage:1048576
    max_inline_action_depth:4
    max_inline_action_size:4096 
    max_ram_size:"68719476736"
    max_transaction_cpu_usage:150000 
    max_transaction_delay:3888000
    max_transaction_lifetime:3600
    max_transaction_net_usage:524288
    min_transaction_cpu_usage:100
    net_usage_leeway:500 
    perblock_bucket:35490081  
    pervote_bucket:269657295
    target_block_cpu_usage_pct:1000  
    target_block_net_usage_pct:1000
    thresh_activated_stake_time:"1529492943000000"
    total_activated_stake:"2424156767873" 
    total_producer_vote_weight:"6174542594341396480.00000000000000000"
    total_ram_bytes_reserved:"6062616000"
    total_ram_stake:967627208 
    total_unpaid_blocks:93736
}]

3. voters

rows: [{
    deferred_trx_id:0
    is_proxy:0
    last_unstake_time:"1970-01-01T00:00:00"
    last_vote_weight:"0.00000000000000000"
    owner:"111111111114"
    producers:[]
    proxied_vote_weight:"0.00000000000000000"
    proxy:""
    staked:46200
    unstaking:"0.0000 EOS"
}]

4. delband

rows:[{
    
    "from":"heztcnbvgmge",
    "to":"heztcnbvgmge",
    "net_weight":"82.5000 EOS",
    "cpu_weight":"82.5000 EOS"
}]


5.rammarket

row: [{
    "supply":"10000000000.0000RAMCORE",
    "base":{"balance":"62656849725 RAM","weight":"0.50000000000000000"},
    "quote":{"balance":"1096762.9136 EOS","weight":"0.50000000000000000"
}]

6 refunds

rows:[{

    "owner":"gm2tsojtgene",
    "request_time":"2018-06-20T02:37:55",
    "net_amount":"4462.0000 EOS",
    "cpu_amount":"4462.0000 EOS"

}]

7. namebids

rows: [{
    high_bid:25301
    high_bidder:"eoszhanghuan"
    last_bid_time:"1529479395500000"
    newname:"1"
}]

8. userres

[{

    cpu_weight:"82.5000 EOS"
    net_weight:"82.5000 EOS"
    owner:"heztcnbvgmge"
    ram_bytes:8155
}]


curl --request POST --data-binary '{"json": true,"code": "eosio","scope":"eosio","table":"rammarket"}' -H 'content-type: application/x-www-form-urlencoded; charset=UTF-8'
http://hapi.eosrio.io/v1/chain/get_table_rows

curl --request POST --data-binary '{"json": true,"code": "eosio","scope":"eosio","table":"global"}' -H 'content-type: application/x-www-form-urlencoded; charset=UTF-8' http://hapi.eosrio.io/v1/chain/get_table_rows
<think>我们正在使用LVGL库中的表格控件(lv_table)。用户的问题是如何使用`lv_table_get_cell_value`函数获取表格中某个单元格的值。 根据LVGL文档,`lv_table_get_cell_value`函数的原型为: const char * lv_table_get_cell_value(lv_obj_t * obj, uint16_t row, uint16_t col); 参数说明: - obj: 指向表格对象的指针 - row: 单元格所在的行(从0开始) - col: 单元格所在的列(从0开始) 返回值:该单元格的字符串内容(只读指针) 使用步骤: 1. 确保已经创建了表格对象,并且已经设置了单元格的值(通过`lv_table_set_cell_value`或`lv_table_set_cell_value_fmt`)。 2. 确定要获取的单元格的行和列索引。 3. 调用`lv_table_get_cell_value`函数,传入表格对象、行索引、列索引。 4. 获取返回的字符串指针,即可得到该单元格的文本内容。 注意:行和列的索引都是从0开始。如果指定的行或列不存在,函数的行为?根据引用[1]:“如果指定的行或列不存在,此函数会自动扩展表格以添加新的行或列”,但这是针对设置函数(如`lv_table_set_cell_value`)而言。对于获取函数,如果行或列索引超出当前表格的范围,则可能会返回NULL或者空字符串?但根据LVGL的源码和文档,获取函数不会扩展表格,而是会返回NULL(如果行或列不存在)?我们需要确认。 然而,在LVGL中,表格的行列数是通过`lv_table_set_row_cnt`和`lv_table_set_col_cnt`设置的。在设置单元格值时,如果指定的行或列超过了当前设置的行列数,设置函数会自动扩展表格(如引用[1]所述)。但是获取函数不会扩展表格,因此如果行或列超出当前表格的范围,则可能会返回NULL。 因此,在调用`lv_table_get_cell_value`之前,最好先通过`lv_table_get_row_cnt`和`lv_table_get_col_cnt`获取当前表格的行数和列数,确保要访问的行列在有效范围内。 示例代码: 假设我们已经有一个表格对象`table`,我们想要获取第1行(索引0)第0列的值: ```c // 获取表格当前的行数和列数 uint16_t row_count = lv_table_get_row_cnt(table); uint16_t col_count = lv_table_get_col_cnt(table); // 假设我们要获取第0行,第0列 uint16_t row = 0; uint16_t col = 0; // 检查行列是否在范围内 if (row < row_count && col < col_count) { const char * value = lv_table_get_cell_value(table, row, col); if (value) { // 使用获取到的值,例如打印出来 printf("Cell value at (%d,%d): %s\n", row, col, value); } else { printf("Cell is empty or error.\n"); } } else { printf("Row or column index out of range.\n"); } ``` 注意:如果单元格没有被设置过值,那么返回的可能是空字符串("")而不是NULL。具体行为取决于LVGL的内部实现。通常,未设置的单元格会返回空字符串。 另外,由于返回的是const char*,所以不需要手动释放内存。 因此,用户的问题可以这样解决:使用`lv_table_get_cell_value`函数,传入表格对象、行索引和列索引,并检查返回的字符串。 相关问题: 1. 如何设置表格的行数和列数? 2. 如何修改表格单元格的值? 3. 表格单元格的样式如何自定义? 4. 如何监听表格单元格的点击事件? 5. 如何使表格单元格可编辑? 由于用户的问题集中在获取单元格值,我们只生成与表格操作相关的问题。</think>### 获取表格单元格的值 在 LVGL 中使用 `lv_table_get_cell_value` 函数获取表格单元格值的步骤如下: #### 1. **函数原型** ```c const char * lv_table_get_cell_value(lv_obj_t * obj, uint16_t row, uint16_t col); ``` - **参数**: - `obj`:表格对象指针 - `row`:目标单元格行索引(从 0 开始) - `col`:目标单元格列索引(从 0 开始) - **返回值**:单元格内容的字符串指针(只读) #### 2. **使用示例** ```c // 创建表格 lv_obj_t * table = lv_table_create(lv_scr_act()); lv_table_set_cell_value(table, 0, 0, "Name"); lv_table_set_cell_value(table, 0, 1, "Age"); // 获取单元格值 const char * name = lv_table_get_cell_value(table, 0, 0); // 获取 (0,0) 的值 const char * age = lv_table_get_cell_value(table, 0, 1); // 获取 (0,1) 的值 // 使用获取的值 printf("Name: %s\n", name); // 输出: Name: Name printf("Age: %s\n", age); // 输出: Age: Age ``` #### 3. **关键注意事项** 1. **索引有效性**: - 行/列索引必须小于当前表格尺寸(通过 `lv_table_get_row_cnt()`/`lv_table_get_col_cnt()` 获取) - 越界访问会导致未定义行为(可能返回 `NULL` 或崩溃) 2. **返回值特性**: - 返回 **只读字符串**,不可修改 - 若单元格未设置值,返回空字符串 `""` - 数据生命周期由 LVGL 管理,无需手动释放内存 3. **格式化内容**: - 对使用 `lv_table_set_cell_value_fmt()` 设置的单元格,返回值是格式化后的字符串 ```c lv_table_set_cell_value_fmt(table, 1, 0, "ID: %d", 1001); const char * id_str = lv_table_get_cell_value(table, 1, 0); // 返回 "ID: 1001" ``` #### 4. **完整工作流程** ```c // 创建表格 lv_obj_t * table = lv_table_create(lv_scr_act()); lv_table_set_col_cnt(table, 2); lv_table_set_row_cnt(table, 3); // 填充数据 lv_table_set_cell_value(table, 0, 0, "Product"); lv_table_set_cell_value(table, 0, 1, "Price"); lv_table_set_cell_value_fmt(table, 1, 0, "%s", "Keyboard"); lv_table_set_cell_value_fmt(table, 1, 1, "$%.2f", 29.99); // 安全获取数据 uint16_t rows = lv_table_get_row_cnt(table); uint16_t cols = lv_table_get_col_cnt(table); for(uint16_t r = 0; r < rows; r++) { for(uint16_t c = 0; c < cols; c++) { const char * val = lv_table_get_cell_value(table, r, c); printf("Cell(%d,%d): %s\n", r, c, val ? val : "NULL"); } } ``` #### 5. **错误处理建议** ```c // 检查行列有效性 if(row >= lv_table_get_row_cnt(table) || col >= lv_table_get_col_cnt(table)) { LV_LOG_ERROR("Invalid cell index!"); return; } // 检查返回值 const char * val = lv_table_get_cell_value(table, row, col); if(!val || val[0] == '\0') { LV_LOG_WARN("Empty cell"); } ``` > **注意**:当表格扩展时(如引用[^1]所述),获取新单元格值前需通过 `lv_table_get_row/col_cnt()` 确认当前尺寸,避免越界访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值