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

我写这是为了回答我自己的问题,因为文档没有明确说明这一点,并且在堆栈溢出或其他任何地方都找不到它。这是将String数组从Java模块返回到React Native Component的方法(从我的个人项目中的代码简化)。

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 Component的方法(从我的个人项目中的代码简化)。

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

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

Java Scanner读取文件的奇怪行为 - java

因此,在使用Scanner类从文件读取内容时,我遇到了一个有趣的问题。基本上,我试图从目录中读取解析应用程序生成的多个输出文件,以计算一些准确性指标。基本上,我的代码只是遍历目录中的每个文件,并使用扫描仪将其打开以处理内容。无论出于何种原因,扫描程序都不会读取其中的一些文件(所有UTF-8编码)。即使文件不是空的,scanner.hasNextLine()在…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

Java Globbing模式以匹配目录和文件 - java

我正在使用递归函数遍历根目录下的文件。我只想提取*.txt文件,但不想排除目录。现在,我的代码如下所示:val stream = Files.newDirectoryStream(head, "*.txt") 但是这样做将不会匹配任何目录,并且返回的iterator()是False。我使用的是Mac,所以我不想包含的噪音文件是.DS_ST…