I.D*_*yan 5 java android react-native
我正在使用 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());
Run Code Online (Sandbox Code Playgroud)
接收方应更新图像组件以显示保存的图像。
当我第一次运行它时,它工作正常,但是当我再次运行它时,即使存储中的图像已更改,组件也不会更新。
为了更新视图,我需要关闭应用程序并重新启动它,告诉它显示存储中保存的内容,然后显示更改。
接收方看起来像这样:
(JniActivity.fillDoor是负责更新storage中图片的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
});
}
}
);
Run Code Online (Sandbox Code Playgroud)
感谢您的任何帮助!
研究完这个问题后发现问题是组件缓存了图像。
只要您使用相同的 URI,组件就不会转向服务器来更新图像,而是使用缓存的信息。
尽管根据我的理解,有一些方法可以告诉组件不缓存图像,但无法 100% 保证组件不会缓存,尽管您尽了最大努力。
最快的解决方案是向图像名称添加一个大的随机数,这将确保 URI 永远不会重复(当然同时确保删除所有以前不再需要的数据)。
示例代码:
String ImageName += Integer.toString(Math.round(Math.random()*1000000000);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2116 次 |
| 最近记录: |