我刚刚开始与React Native和Realm一起工作,并且效果很好。
但是,到目前为止,我们一直在使用默认位置中创建的领域文件,但是我们希望能够在运送应用程序时将领域文件包装。尝试访问直接路径将在我们的仿真器的"可写文档"文件夹中创建一个新的领域,但是我不确定如何包装我们创建的领域文件并将数据填充到该文件夹中。
是否有一种方法可以告诉React Antial将文件夹存储在项目的根部(例如/data/(,并能够从该文件夹打开一个领域?
我在需要领域文件的页面的构造函数中尝试了此操作:
let realm = new Realm({
path: './data/ourrealm.realm',
schema: [schema1, schema2, schema3]
});
但这引发了这样的错误:
Error: Unable to open a realm at path './data/ourrealm.realm.management':
make_dir() failed: No such file or directory Path:.
我在他们的github上找到了一个问题(https://github.com/realm/realm/realm-js/issues/816(,但似乎用户似乎可以无需这样的问题就可以访问该文件,所以我认为我缺少一个步骤,包括该文件夹作为应用程序的可用资源。
假定这样的结构: schema.js
export const EVENTS_SCHEMA = 'events';
export const EventsSchema = {
name: EVENTS_SCHEMA,
primaryKey: 'EventID',
properties: {
EventID: 'int',
EventName: 'string',
EventDate: 'string'
}
};
app.js
import React, { Component } from 'react';
import { Text, View, Button, TextInput } from 'react-native';
import axios from 'axios';
import { EventsSchema, EVENTS_SCHEMA } from './allSchemas';
const Realm = require('realm');
const databaseOptions = {
path: 'realmT4.realm',
schema: [EventsSchema],
schemaVersion: 0
};
type Props = {};
export default class App extends Component<Props> {
constructor(props) {
super(props);
this.state = { events: null, size: 0, runTime: 0, findName: '', text: '', updateText: '' };
}
componentWillMount() {
Realm.open(databaseOptions).then(realm => {
this.setState({ size: realm.objects(EVENTS_SCHEMA).length });
});
}
downloadEvents() {
const startTime = new Date().getTime();
axios.get('https://YourAPI/YourMethod')
.then(response => {
Realm.open(databaseOptions).then(realm => {
realm.write(() => {
response.data.forEach(obj => {
if (realm.objects(EVENTS_SCHEMA).filtered(`EventID=${obj.EventID}`).length === 0) {
realm.create(EVENTS_SCHEMA, obj);
}
});
this.setState({ size: realm.objects(EVENTS_SCHEMA).length });
const endTime = new Date().getTime();
this.setState({ runTime: endTime - startTime });
});
});
});
}
uploadEvents() {
}
clearAllEvents() {
const startTime = new Date().getTime();
Realm.open(databaseOptions)
.then(realm => {
realm.write(() => {
const allEvents = realm.objects(EVENTS_SCHEMA);
realm.delete(allEvents); // Deletes all books
this.setState({ size: realm.objects(EVENTS_SCHEMA).length });
const endTime = new Date().getTime();
this.setState({ runTime: endTime - startTime });
})
})
.catch(error => {
});
}
findID() {
const startTime = new Date().getTime();
const text = this.state.text;
Realm.open(databaseOptions).then(realm => {
const res = realm.objects(EVENTS_SCHEMA).filtered(`EventID=${text}`)
this.setState({ findName: res[0].EventID + ': ' + res[0].EventName })
const endTime = new Date().getTime();
this.setState({ runTime: endTime - startTime });
})
.catch((error) => {
console.log(error);
});
}
findName() {
const startTime = new Date().getTime();
const text = this.state.text;
Realm.open(databaseOptions).then(realm => {
const res = realm.objects(EVENTS_SCHEMA).filtered(`EventName="${text}"`)
this.setState({ findName: res[0].EventID + ': ' + res[0].EventName })
const endTime = new Date().getTime();
this.setState({ runTime: endTime - startTime });
})
.catch((error) => {
console.log(error);
});
}
updateName() {
const startTime = new Date().getTime();
const updateText = this.state.updateText;
const text = this.state.text;
Realm.open(databaseOptions).then(realm => {
let target = realm.objects(EVENTS_SCHEMA).filtered(`EventID=${text}`)[0];
if (!target) {
target = realm.objects(EVENTS_SCHEMA).filtered(`EventName=${text}`)[0];
}
realm.write(() => {
target.EventName = updateText;
})
const endTime = new Date().getTime();
this.setState({ runTime: endTime - startTime });
})
}
render() {
const info = 'Number of items in this Realm: ' + this.state.size
return (
<View >
<Text>
{info}
</Text>
<Text>
Execution time: {this.state.runTime} ms
</Text>
<Button onPress={this.downloadEvents.bind(this)} title="Download" />
<Button onPress={this.uploadEvents.bind(this)} title="Upload" />
<Button onPress={this.clearAllEvents.bind(this)} title="Delete All" />
<TextInput
onChangeText={(text) => this.setState({ text })}
value={this.state.text}
/>
<Button onPress={this.findID.bind(this)} title="Find by ID" />
<Button onPress={this.findName.bind(this)} title="Find by Name" />
<Text>
Find user: {this.state.findName}
</Text>
<Text>
Update above user name to:
</Text>
<TextInput
onChangeText={(updateText) => this.setState({ updateText })}
value={this.state.updateText}
/>
<Button onPress={this.updateName.bind(this)} title="Update Name" />
</View>
);
}
}
假设(基于示例模式(,您的服务器的响应与以下方式类似:
[{"EventID":1325,"EventName":"Summer Night","EventDate":"12/31/2018"},{"EventID":1326,"EventName":"Birthday Party","EventDate":"12/31/2011"}]
如果要检查存储数据的文件,则可以使用:如何找到我的领域文件?
这是如何适合您的。