HarmonyOS 鸿蒙Next 为什么会出现这个错误,明明没有用到浮点类型,请大佬看看如何解决这个问题

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 为什么会出现这个错误,明明没有用到浮点类型,请大佬看看如何解决这个问题

代码如下

import cloud, { Database } from '@hw-agconnect/cloud'

// @ts-ignore
import schema from '../../resources/rawfile/schema.json'
import { HapUVideoInfo } from '../model/HapUVideoInfo'
import hilog from '@ohos.hilog'

//IDataSource接口实现
interface IDataSource {
  totalCount(): number; // 获得数据总数
  getData(index: number): HapUVideoInfo; // 获取索引值对应的数据
  registerDataChangeListener(listener: DataChangeListener): void; // 注册数据改变的监听器
  unregisterDataChangeListener(listener: DataChangeListener): void; // 注销数据改变的监听器
}

//用于处理数据侦听器的 IDataSource 的基本实现
class BasicDataSource implements IDataSource {
  private listeners: DataChangeListener[] = [];
  private originDataArray: HapUVideoInfo[] = [];

  public totalCount(): number {
    return 0;
  }

  public getData(index: number): HapUVideoInfo {
    return this.originDataArray[index];
  }

  // 该方法为框架侧调用,为LazyForEach组件向其数据源处添加listener监听
  registerDataChangeListener(listener: DataChangeListener): void {
    if (this.listeners.indexOf(listener) < 0) {
      console.info('add listener');
      this.listeners.push(listener);
    }
  }

  // 该方法为框架侧调用,为对应的LazyForEach组件在数据源处去除listener监听
  unregisterDataChangeListener(listener: DataChangeListener): void {
    const pos = this.listeners.indexOf(listener);
    if (pos >= 0) {
      console.info('remove listener');
      this.listeners.splice(pos, 1);
    }
  }

  // 通知LazyForEach组件需要重载所有子组件
  notifyDataReload(): void {
    this.listeners.forEach(listener => {
      listener.onDataReloaded();
    })
  }

  // 通知LazyForEach组件需要在index对应索引处添加子组件
  notifyDataAdd(index: number): void {
    this.listeners.forEach(listener => {
      listener.onDataAdd(index);
    })
  }

  // 通知LazyForEach组件在index对应索引处数据有变化,需要重建该子组件
  notifyDataChange(index: number): void {
    this.listeners.forEach(listener => {
      listener.onDataChange(index);
    })
  }

  // 通知LazyForEach组件需要在index对应索引处删除该子组件
  notifyDataDelete(index: number): void {
    this.listeners.forEach(listener => {
      listener.onDataDelete(index);
    })
  }
}

class VideoDataSource extends BasicDataSource {
  private dataArray: HapUVideoInfo[] = [];

  public totalCount(): number {
    return this.dataArray.length;
  }

  public getData(index: number): HapUVideoInfo{
    if (index < 0 ) {
      return undefined;
    }
    return this.dataArray[index];
  }

  public addData(index: number, data: HapUVideoInfo): void {
    this.dataArray.splice(index, 0, data);
    this.notifyDataAdd(index);
  }

  public pushData(data: HapUVideoInfo): void {
    this.dataArray.push(data);
    this.notifyDataAdd(this.dataArray.length - 1);
  }
}

@Entry
@Component

struct Hapu {
  private database: Database = null //引入云数据库
  private data: VideoDataSource = new VideoDataSource();

  async aboutToAppear() {
    this.database = cloud.database({ //引入存储区HapU
      zoneName: 'HapU',
      objectTypeInfo: schema
    })

    this.VideoInfo('')
  }

  async VideoInfo(name: string) {
    try {
      const query = this.database.collection(HapUVideoInfo).query().orderByAsc("id");
      if (!name) {
        query.isNotNull("name");
      }
      const fetchedData: HapUVideoInfo[] = await query.get();
      if (fetchedData.length === 0) {
        // 处理空数据的情况
        return;
      }
      for (let i = 0; i < fetchedData.length; i++) {
        const videoItem = fetchedData[i];
        this.data.addData(i, videoItem);
      }
    } catch (error) {
      hilog.error(0, 'VideoInfo', `Error fetching data: ${error}`)
    }
  }
  build() {
    Swiper() {
      LazyForEach(this.data, (VItem: HapUVideoInfo) => {
        Row(){
          Text(`${VItem.getId()}`)
          Text(`${VItem.getName()}`)
          Text(`${VItem.getUid()}`)
        }
      })
    }
  }
}

错误信息

Reason:Signal:SIGFPE(FPE_INTDIV)

HapUVideoInfo表结构及数据如下


更多关于HarmonyOS 鸿蒙Next 为什么会出现这个错误,明明没有用到浮点类型,请大佬看看如何解决这个问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

这个问题通过在线提单进一步解决:https://developer.huawei.com/consumer/cn/support/feedback/#/,感谢您的反馈和支持

更多关于HarmonyOS 鸿蒙Next 为什么会出现这个错误,明明没有用到浮点类型,请大佬看看如何解决这个问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我也出现了类似的问题,找到了半天 改的和文档一样了 还是报错

我在 默认的时候 加了一项空数据

private dataArray: BannerItemType[] = [
  {
    "pic": "",
    "url": "",
    "typeTitle": ""
  }
];

然后在添加数据之前删除掉 this.data.deleteData(0) 就临时解决了

在HarmonyOS鸿蒙Next开发中,即使代码中没有显式使用浮点类型,也可能出现与浮点相关的错误。这通常是由于编译器或运行时环境在处理某些操作时隐式引入了浮点运算。例如,某些数学函数或库可能会在内部使用浮点运算,即使你传入的是整数。此外,某些硬件架构或编译器优化也可能导致浮点指令的生成。

要解决这个问题,可以检查以下几个方面:

  1. 检查使用的库或API:确保你使用的库或API没有在内部使用浮点运算。查阅相关文档,确认其行为。

  2. 编译器设置:检查编译器的设置,确保没有启用可能导致浮点指令生成的优化选项。

  3. 代码中的隐式转换:检查代码中是否存在可能导致隐式类型转换的操作,例如整数除法或某些数学运算。

  4. 调试工具:使用调试工具(如GDB)检查程序运行时是否执行了浮点指令,定位问题所在。

  5. 硬件架构:确认目标硬件架构是否支持浮点运算,以及编译器是否针对该架构进行了适当的优化。

通过以上步骤,可以定位并解决鸿蒙Next中出现的浮点类型错误。

这个错误可能与编译器优化或数据类型隐式转换有关。即使代码中没有直接使用浮点类型,某些库函数或编译器优化可能引入了浮点运算。建议检查以下几点:

  • 禁用编译器优化:尝试在编译选项中禁用优化(如 -O0),排除优化引入的浮点运算。
  • 检查隐式转换:确保没有将整数隐式转换为浮点数,尤其是在表达式或函数调用中。
  • 查看库函数:确认使用的库函数是否涉及浮点运算。
  • 编译器版本:确保使用的是支持鸿蒙Next的最新编译器版本。

如果问题仍未解决,建议提供错误日志或相关代码片段以便进一步分析。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!