gpt4 book ai didi

java - 内存中的图像更新不会反射(reflect)在 react 原生图像组件中

转载 作者:行者123 更新时间:2023-12-01 13:46:59 24 4
gpt4 key购买 nike

我正在使用 react native 制作一个 android 应用程序。该应用程序使用 java/native 代码进行图像处理。

该应用程序有一个图像组件,单击该组件会调用一个 java 函数,该函数创建一个图像并将其保存到内部存储并返回 URI 给它。
(结果图像可能不同)

示例代码是:

FileOutputStream out = null;
try {
out = new FileOutputStream(imgPath);
resultMap.compress(Bitmap.CompressFormat.JPEG, 100, out);
} catch (Exception e) {
finishCallback.invoke(false);
Toast.makeText(getReactApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
return;
} finally {
try {
out.close();
} catch (IOException e) {
finishCallback.invoke(false);
Toast.makeText(getReactApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
return;
}
}

finishCallback.invoke(true,imgPath.toURI().toString());

接收方应更新图像组件以显示保存的图像。

当我第一次运行它时它工作正常,但是当我再次运行它时,即使存储中的图像发生了变化,组件也没有被更新。

为了更新 View ,我需要关闭应用程序并重新启动它,告诉它显示存储中保存的内容,然后显示更改。
  • 这只发生在返回的 URI 之前已经被使用过的情况下,尽管我已经检查并确保旧图像被删除并且有一个新图像。

  • 接收方如下所示:

    (JniActivity.fillDoor是负责更新存储中图片的java函数)
      onSelectFillImage = (source) => {
    JniActivity.fillDoor(
    this.state.doorImageSource.uri,
    source.uri,
    (isDone, picURI) => {
    Alert.alert("is done: " + isDone);
    if (isDone) {

    const fixed = picURI

    const source1 = { uri: fixed };

    this.setState({
    filledDoorImageSource: source1
    });
    }
    }
    );

    感谢您的任何帮助!

    最佳答案

    调查此问题后发现问题是组件缓存了图像。

    只要您使用相同的 URI,组件就不会求助于服务器来更新图像,而是使用缓存的信息。

    尽管有一些方法可以告诉组件不缓存图像,但我无法保证 100% 组件不会缓存,尽管您已尽最大努力。

    最快的解决方案是在图像名称中添加一个大的随机数,以确保 URI 永远不会重复(同时确保您删除所有以前不再需要的数据)。

    示例代码:

    String ImageName += Integer.toString(Math.round(Math.random()*1000000000);

    关于java - 内存中的图像更新不会反射(reflect)在 react 原生图像组件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48392286/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com