HarmonyOS 鸿蒙Next 在ListContainer组件使用自己实现的provider类对item进行赋值时报错

HarmonyOS 鸿蒙Next 在ListContainer组件使用自己实现的provider类对item进行赋值时报错

public class Chatdetailprovider extends BaseItemProvider {
    private AbilitySlice abilitySlice;
    private List<Chatitem> list;

    public AbilitySlice getAbilitySlice() {
        return abilitySlice;
    }

    public void setAbilitySlice(AbilitySlice abilitySlice) {
        this.abilitySlice = abilitySlice;
    }

    public List<Chatitem> getList() {
        return list;
    }

    public void setList(List<Chatitem> list) {
        this.list = list;
    }

    public Chatdetailprovider() {
    }

    public Chatdetailprovider(AbilitySlice abilitySlice, List<Chatitem> list) {
        this.abilitySlice = abilitySlice;
        this.list = list;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
        DirectionalLayout dl= (DirectionalLayout)LayoutScatter.getInstance(abilitySlice).parse(ResourceTable.Layout_chatdetailview,null,false);
        Text text1 =(Text) dl.findComponentById(ResourceTable.Id_cdmain);
        Chatitem chatitem=list.get(i);
        System.out.println("11111111111111111111"+chatitem.getUser());
        text1.setText(chatitem.getUser());
        System.out.println("00000000000000000000000000000");
        return dl;
    }
}

报错提示:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.kaoyanapplication, PID: 5785
java.lang.NullPointerException: Attempt to invoke virtual method 'void ohos.agp.components.ListContainer.setItemProvider(ohos.agp.components.BaseItemProvider)' on a null object reference
at com.example.kaoyanapplication.slice.ChatdetailSlice.onStart(ChatdetailSlice.java:22)
at ohos.aafwk.ability.AbilitySlice.start(AbilitySlice.java:3270)
at ohos.aafwk.ability.AbilitySliceScheduler.addAbilitySliceSchedule(AbilitySliceScheduler.java:243)
at ohos.aafwk.ability.AbilitySliceScheduler.doAddAbilitySlice(AbilitySliceScheduler.java:349)
at ohos.aafwk.ability.AbilitySliceScheduler.access$100(AbilitySliceScheduler.java:37)
at ohos.aafwk.ability.AbilitySliceScheduler$2.run(AbilitySliceScheduler.java:319)
at ohos.app.dispatcher.task.Task.run(Task.java:71)
at android.os.Handler.handleCallback(Handler.java:900)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:219)
at android.app.ActivityThread.main(ActivityThread.java:8668)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)

更多关于HarmonyOS 鸿蒙Next 在ListContainer组件使用自己实现的provider类对item进行赋值时报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

楼主你好,根据错误日志:

com.example.kaoyanapplication.slice.ChatdetailSlice.onStart(ChatdetailSlice.java:22)  
at ohos.aafwk.ability.AbilitySlice.start(AbilitySlice.java:3270)

可以看看ChatdetailSlice的22行,看看怎么写的,可以提供下ChatdetailSlice的代码。

更多关于HarmonyOS 鸿蒙Next 在ListContainer组件使用自己实现的provider类对item进行赋值时报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


函数是返回的Component类型,不是DirectionalLayout类型

@Override

public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
Component cpt=component;

if (cpt==null){
    cpt=LayoutScatter.getInstance(abilitySlice).parse(ResourceTable.Layout_chatdetailview,null,false);  
}

Text text1 =(Text) cpt.findComponentById(ResourceTable.Id_cdmain);  

Chatitem chatitem=list.get(i);  

System.out.println("11111111111111111111"+chatitem.getUser());  

text1.setText(chatitem.getUser());  

System.out.println("00000000000000000000000000000");  

return cpt;  

}

看报错,你尝试在一个空物体上调用函数,找出为什么这个物体会是空的,

欢迎开发小伙伴们进来帮帮楼主

在HarmonyOS鸿蒙Next系统中,如果在ListContainer组件使用自定义的provider类对item进行赋值时遇到报错,可能的原因及解决方法如下:

  1. Provider类实现问题

    • 确保自定义的provider类正确实现了必要的数据提供接口,如ItemProvider等。
    • 检查provider类中的数据类型是否与ListContainer组件中定义的item类型一致。
  2. 数据绑定问题

    • 确认在ListContainer组件中正确设置了数据源,并绑定了自定义provider类。
    • 检查数据绑定过程中是否有类型不匹配或数据为空的情况。
  3. 生命周期管理

    • 确保provider类在ListContainer组件的生命周期内正确管理数据的更新和销毁。
    • 避免在provider类中持有不必要的资源,导致内存泄漏或性能问题。
  4. 错误和异常处理

    • 查看报错信息,确定具体的错误类型和位置。
    • 根据错误类型,检查代码逻辑是否有误,或是否存在资源访问权限问题。

如果以上方法仍无法解决问题,可能是更复杂的系统或应用层面的问题。此时,建议直接联系官网客服获取进一步帮助。官网地址是:https://www.itying.com/category-93-b0.html

回到顶部