【问题标题】:React Native can't return arrayReact Native 无法返回数组
【发布时间】:2019-07-12 00:01:13
【问题描述】:

好吧,伙计们。

我正在使用 BrotherSDK 构建一个小型 POC,我要做的就是返回标签打印机列表及其纸张尺寸。 我已经读过,为了做到这一点,我必须使用 ReactBridge 中的Promise.resolve 函数。

我试过了,但我的模拟器上出现这样的错误。

我的 Java 代码如下所示:

 @ReactMethod
    public void getPrinterList(final Promise promise) {
        try {
            ArrayList<String> printerList = new ArrayList<>();
            Collections.addAll(printerList, "QL710W", "QL720NW",
                    "PTE550W",
                    "PTE500",
                    "PT750W",
                    "PTD800W",
                    "PTE800W",
                    "PTE850TKW",
                    "PTP900W",
                    "PTP960NW",
                    "QL810W",
                    "QL800",
                    "QL820NWB",
                    "PTP300BT",
                    "QL1100",
                    "QL1110NWB",
                    "QL1115NWB",
                    "PTP710BT");
            String [] retArray = new String[printerList.size()];
            retArray = printerList.toArray(retArray);
            WritableArray promiseArray = Arguments.createArray();
            for(int i=0; i < retArray.length; i++){
                promiseArray.pushString(retArray[i]);
            }
            promise.resolve(promiseArray);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @ReactMethod
    public void getPaperSizes(final Promise promise) {
        try {
            List<String> paperSizeList = new ArrayList<>();
            Collections.addAll(paperSizeList, "W17H54",
                    "W17H87",
                    "W23H23",
                    "W29H90",
                    "W29H42","W38H90",
                    "W39H48",
                    "W52H29",
                    "W54H29",
                    "W62H29",
                    "W62H100",
                    "W60H86",
                    "W12","W29", "W38",
                    "W50", "W54",
                    "W62", "W62RB");
            String [] retArray = new String[paperSizeList.size()];
            retArray = paperSizeList.toArray(retArray);
            WritableArray promiseArray = Arguments.createArray();
            for(int i = 0; i < retArray.length; i++) {
                promiseArray.pushString(retArray[i]);
            }
            promise.resolve(promiseArray);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

而我的 JS 代码如下所示:

// Two arrays
printerList = [];
paperSizes = [];

// Functions

  getPrinterList = async () => {
    this.printerList = await MyRNModule.getPrinterList();
  }

  getPaperSizes = async () =>  {
    this.paperSizes = await MyRNModule.getPaperSizes();
  }

【问题讨论】:

    标签: javascript java reactjs react-native react-native-android


    【解决方案1】:

    错误信息说明了一切。

    com.facebook.react.bridge.readablenativemap 不能转换为 java.lang.string

    您返回 array 就好了,除了 string 是预期的。

    要解决这个问题,您可以通过join 将数组转换为字符串。

    【讨论】:

    • 是的,就是这样。太感谢了。我完全忘记了我将接收到的数据发送到接收StringToast。现在一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多