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

Android应用用Proteus加载JSON动态视图时遇空指针异常求助

解决Proteus框架JSON生成动态视图时的空指针异常问题

你遇到的空指针异常根源很明确——你并没有真正读取到assets文件夹里的JSON文件内容,而是把文件名字符串直接当成了JSON数据来解析,导致layout对象为null,后续访问它的type字段时触发了异常。

问题出在哪里?

你的代码里用了new StringReader("layouts.json"),这会创建一个读取字符串"layouts.json"的Reader,而不是读取assets目录下名为layouts.json的文件内容。这个字符串本身不是有效的JSON,所以解析出来的layout自然是null,进而抛出Attempt to read from field 'java.lang.String com.flipkart.android.proteus.value.Layout.type' on a null object reference错误。

修正步骤

你需要通过AssetManager正确读取assets文件夹中的JSON文件内容,再传入StringReader进行解析。

1. 添加读取assets文件的工具方法

先写一个通用方法来读取assets里的文件内容:

private String readAssetFile(AssetManager assetManager, String fileName) throws IOException {
    InputStream inputStream = assetManager.open(fileName);
    int size = inputStream.available();
    byte[] buffer = new byte[size];
    inputStream.read(buffer);
    inputStream.close();
    return new String(buffer, StandardCharsets.UTF_8);
}

2. 修改原有的JSON读取逻辑

替换你原来的代码,先读取文件内容再创建JsonReader:

AssetManager assetManager = getAssets(); // 在Activity/Fragment中获取,若在其他类需传入上下文获取
try {
    // 读取布局JSON文件内容
    String layoutJsonContent = readAssetFile(assetManager, "layouts.json");
    JsonReader readerlayout = new JsonReader(new StringReader(layoutJsonContent));
    readerlayout.setLenient(true);

    // 读取数据JSON文件内容
    String dataJsonContent = readAssetFile(assetManager, "user.json");
    JsonReader readerdata = new JsonReader(new StringReader(dataJsonContent));
    readerdata.setLenient(true);

    layout = proteusTypeAdapterFactory.LAYOUT_TYPE_ADAPTER.read(readerlayout);
    data = proteusTypeAdapterFactory.OBJECT_TYPE_ADAPTER.read(readerdata);
} catch (IOException e) {
    throw new RuntimeException(e);
}

// 后续的视图渲染逻辑
view = layoutInflater.inflate(layout, data, container, 0);
container.addView(view.getAsView());

额外检查点

  • 确认assets文件夹中的文件名拼写完全正确(Android系统对文件名大小写敏感,比如Layouts.json和layouts.json是两个不同的文件)
  • 验证JSON文件格式是否有效,避免因JSON语法错误导致解析失败
  • 确认proteusTypeAdapterFactory已经正确初始化,没有为null

内容的提问来源于stack exchange,提问作者Prajakta Chavan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:26:49