java - 如何从 React Native 组件中的 Java 模块返回数组?

标签 java android-studio react-native native-module

我写这篇文章是为了回答我自己的问题,因为文档没有明确说明这一点,而且我在堆栈溢出或其他任何地方都找不到它。以下是如何将 String 数组从 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);
    }
}
...
}

最佳答案

我写这篇文章是为了回答我自己的问题,因为文档没有明确说明这一点,而且我在堆栈溢出或其他任何地方都找不到它。以下是如何将 String 数组从 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);
    }
}
...
}

关于java - 如何从 React Native 组件中的 Java 模块返回数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46414502/

相关文章:

java - 使用 Hibernate 映射 Map<Interface,Interface>

java - 实现不同步读取的双缓冲java HashMap

android - 如何使用 "APK Signature Scheme v3 and v4"签署我的应用程序?

reactjs - 在水平 FlatList 上 react native 滚动延迟

java - 在Java中,我可以跟踪每种情况的switch语句中的所有值吗?

java - 如何打印 HashMap 中的键列表?

android - 已启用 Multidex - 仍然无法合并 dex

android - 错误 :XML version "2.0" is not supported, 仅支持 XML 1.0

android - 如何运行/安装 React Native 官方示例?

react-native - react 原生子弹字符?或统一码?