我如何 return 来自 React Native 组件中 Java 模块的数组?
How do I return an array from a Java module in a React Native Component?
我写这篇文章是为了回答我自己的问题,因为文档没有明确说明这一点,而且我在堆栈溢出或其他任何地方都找不到它。以下是如何将 Java 模块中的字符串数组 Java 返回到 React Native 组件(从我个人项目中的代码中简化而来)。
CPPConnection.java 文件
public class CPPConnection extends ReactContextBaseJavaModule {
@ReactMethod
public void GetDerivedUnits(String scheme,final Promise promise){
try {
List<String> returnSet = new ArrayList<String>();
//Set first value so that there is a lead value
returnSet.add("");
returnSet.add(scheme);
returnSet.add("lb");
returnSet.add("kg");
String[] returnArray = new String[returnSet.size()];
returnArray = returnSet.toArray(returnArray);
WritableArray promiseArray=Arguments.createArray();
for(int i=0;i<returnArray.length;i++){
promiseArray.pushString(returnArray[i]);
}
promise.resolve(promiseArray);
}
catch(Exception e){
promise.reject(e);
}
}
}
Density.js 文件
export default class Density extends Component{
...
constructor(props) {
super(props);
this.state = {
mass: '',
massUnits:[],
volume: '',
volumeUnits:[],
density: 'N/A',
};
this.GetDerivedUnits("M",this.state.massUnits);
this.GetDerivedUnits("L3",this.state.volumeUnits);
}
GetDerivedUnits= async (scheme,unitArray)=>{
try{
let asyncUnitSet = await CPPConnection.GetDerivedUnits(scheme);
for (let i=0;i<asyncUnitSet.length;i++){
unitArray.push(asyncUnitSet[i])
this.setState({
unitArray: unitArray
})
}
console.log(asyncUnitSet);
}catch(e){
console.error(e);
}
}
...
}
您可以使用 ReadableArray as described here.
我写这篇文章是为了回答我自己的问题,因为文档没有明确说明这一点,而且我在堆栈溢出或其他任何地方都找不到它。以下是如何将 Java 模块中的字符串数组 return 返回到 React Native 组件(根据我个人项目中的代码进行了简化)。
CPPConnection.java 文件
public class CPPConnection extends ReactContextBaseJavaModule {
@ReactMethod
public void GetDerivedUnits(String scheme,final Promise promise){
try {
List<String> returnSet = new ArrayList<String>();
//Set first value so that there is a lead value
returnSet.add("");
returnSet.add(scheme);
returnSet.add("lb");
returnSet.add("kg");
String[] returnArray = new String[returnSet.size()];
returnArray = returnSet.toArray(returnArray);
WritableArray promiseArray=Arguments.createArray();
for(int i=0;i<returnArray.length;i++){
promiseArray.pushString(returnArray[i]);
}
promise.resolve(promiseArray);
}
catch(Exception e){
promise.reject(e);
}
}
}
Density.js 文件
export default class Density extends Component{
...
constructor(props) {
super(props);
this.state = {
mass: '',
massUnits:[],
volume: '',
volumeUnits:[],
density: 'N/A',
};
this.GetDerivedUnits("M",this.state.massUnits);
this.GetDerivedUnits("L3",this.state.volumeUnits);
}
GetDerivedUnits= async (scheme,unitArray)=>{
try{
let asyncUnitSet = await CPPConnection.GetDerivedUnits(scheme);
for (let i=0;i<asyncUnitSet.length;i++){
unitArray.push(asyncUnitSet[i])
this.setState({
unitArray: unitArray
})
}
console.log(asyncUnitSet);
}catch(e){
console.error(e);
}
}
...
}
我写这篇文章是为了回答我自己的问题,因为文档没有明确说明这一点,而且我在堆栈溢出或其他任何地方都找不到它。以下是如何将 Java 模块中的字符串数组 Java 返回到 React Native 组件(从我个人项目中的代码中简化而来)。
CPPConnection.java 文件
public class CPPConnection extends ReactContextBaseJavaModule {
@ReactMethod
public void GetDerivedUnits(String scheme,final Promise promise){
try {
List<String> returnSet = new ArrayList<String>();
//Set first value so that there is a lead value
returnSet.add("");
returnSet.add(scheme);
returnSet.add("lb");
returnSet.add("kg");
String[] returnArray = new String[returnSet.size()];
returnArray = returnSet.toArray(returnArray);
WritableArray promiseArray=Arguments.createArray();
for(int i=0;i<returnArray.length;i++){
promiseArray.pushString(returnArray[i]);
}
promise.resolve(promiseArray);
}
catch(Exception e){
promise.reject(e);
}
}
}
Density.js 文件
export default class Density extends Component{
...
constructor(props) {
super(props);
this.state = {
mass: '',
massUnits:[],
volume: '',
volumeUnits:[],
density: 'N/A',
};
this.GetDerivedUnits("M",this.state.massUnits);
this.GetDerivedUnits("L3",this.state.volumeUnits);
}
GetDerivedUnits= async (scheme,unitArray)=>{
try{
let asyncUnitSet = await CPPConnection.GetDerivedUnits(scheme);
for (let i=0;i<asyncUnitSet.length;i++){
unitArray.push(asyncUnitSet[i])
this.setState({
unitArray: unitArray
})
}
console.log(asyncUnitSet);
}catch(e){
console.error(e);
}
}
...
}
您可以使用 ReadableArray as described here.
我写这篇文章是为了回答我自己的问题,因为文档没有明确说明这一点,而且我在堆栈溢出或其他任何地方都找不到它。以下是如何将 Java 模块中的字符串数组 return 返回到 React Native 组件(根据我个人项目中的代码进行了简化)。
CPPConnection.java 文件
public class CPPConnection extends ReactContextBaseJavaModule {
@ReactMethod
public void GetDerivedUnits(String scheme,final Promise promise){
try {
List<String> returnSet = new ArrayList<String>();
//Set first value so that there is a lead value
returnSet.add("");
returnSet.add(scheme);
returnSet.add("lb");
returnSet.add("kg");
String[] returnArray = new String[returnSet.size()];
returnArray = returnSet.toArray(returnArray);
WritableArray promiseArray=Arguments.createArray();
for(int i=0;i<returnArray.length;i++){
promiseArray.pushString(returnArray[i]);
}
promise.resolve(promiseArray);
}
catch(Exception e){
promise.reject(e);
}
}
}
Density.js 文件
export default class Density extends Component{
...
constructor(props) {
super(props);
this.state = {
mass: '',
massUnits:[],
volume: '',
volumeUnits:[],
density: 'N/A',
};
this.GetDerivedUnits("M",this.state.massUnits);
this.GetDerivedUnits("L3",this.state.volumeUnits);
}
GetDerivedUnits= async (scheme,unitArray)=>{
try{
let asyncUnitSet = await CPPConnection.GetDerivedUnits(scheme);
for (let i=0;i<asyncUnitSet.length;i++){
unitArray.push(asyncUnitSet[i])
this.setState({
unitArray: unitArray
})
}
console.log(asyncUnitSet);
}catch(e){
console.error(e);
}
}
...
}