我想开发一个应用程序,用户可以 Select 不同的游戏包安装在他们的android或ios设备上.游戏包将包括:

  • 一个或多个JSON文件
  • 图像
  • 声音

现在我并不担心这些文件是单独传输还是以zip文件传输(尽管zip文件肯定是首选).当然,该设备需要连接到互联网才能获得当前的游戏包列表,并下载用户 Select 的游戏包.一旦游戏包下载到手机上,用户就不需要连接互联网来玩游戏,因为他们将拥有所有文件.

我该如何在我的项目中实现这一点?

如何下载这些文件?我会使用react-native-fetch-blob库并将其保存在特定位置吗?这个库指的是将其保存为"缓存",而不是永久保存,所以我不确定这是否是正确的解决方案.我在library页面上看到的具体部分是"使用特定文件路径".但因为它是缓存,我应该寻找更长期的存储吗?页面上确实说文件不会被删除,所以我有点困惑,在这种情况下,永久存储和缓存之间的区别是什么.

下载完文件后,我能打开图像并显示它们,打开声音文件并播放它们,打开json文件并处理它们吗?

推荐答案

查看React Native FS,特别是downloadFile:上的文档

https://github.com/johanneslumpe/react-native-fs#downloadfileoptions-downloadfileoptions--jobid-number-promise-promisedownloadresult-

下面是一个有效的例子:

import React, { Component } from 'react';
import {
  AppRegistry,
  Text,
  View,
  Image,
} from 'react-native';
import RNFS from 'react-native-fs';


export default class downloadFile extends Component {
  constructor() {
    super()
    this.state = {
      isDone: false,
    };
    this.onDownloadImagePress = this.onDownloadImagePress.bind(this);
  }

  onDownloadImagePress() {

      RNFS.downloadFile({
        fromUrl: 'https://facebook.github.io/react-native/img/header_logo.png',
        toFile: `${RNFS.DocumentDirectoryPath}/react-native.png`,
      }).promise.then((r) => {
        this.setState({ isDone: true })
      });
  }

  render() {
    const preview = this.state.isDone ? (<View>
      <Image style={{
        width: 100,
        height: 100,
        backgroundColor: 'black',
      }}
        source={{
          uri: `file://${RNFS.DocumentDirectoryPath}/react-native.png`,
          scale: 1
        }}
      />
      <Text>{`file://${RNFS.DocumentDirectoryPath}/react-native.png`}</Text>
    </View>
    ) : null;
    return (
      <View>
        <Text onPress={this.onDownloadImagePress}>Download Image</Text>
        {preview}
      </View>
    );
  }
}
AppRegistry.registerComponent('downloadFile', () => downloadFile);

重要的是要知道heightwidth必须设置在Image

enter image description here

React-native相关问答推荐

Reaction-原生NavBottom设计背景

Google SignIn SDK 因抛出错误而失败,发生不可恢复的登录失败 -catch 错误

为应用创建单个 MobX store 的最佳方式是什么?

RNFS.exists() 总是返回 TRUE

自从升级到 Xcode 10.2 我不能再通过 cli 运行 react-native run-ios

在 React Native 中计算两个 lat+lng 坐标之间的距离?

请求的体验使用 Expo SDK v(null),但此 Expo Client至少需要 v23.0.0版本

NativeBase + Exponent Header

如何在 react-native 上自动聚焦下一个 TextInput

如何在react native中过滤对象数组?

React Native 中的原生广告

使用 Jest 测试 React Native 应用程序

如何在 React Native 中创建对角线边框?

如何在样式组件之外获取主题?

React Native - 为什么执行这个函数?

Tools > Android 菜单在 Android Studio 中不存在

开始滚动时使 TouchableOpacity 不突出显示元素

如何在 React Native 中禁用图像淡入效果?

如何在 Android 手机上运行 React Native 应用程序

react-native构建错误:package android.support.annotation does not exist