class WritableMap React-Native 中没有接口方法 putArray
No interface method putArray in class WritableMap React-Native
我用的是RN版本:“0.61.5”
问题是我装的是react-native-beacons-manager1.0.7(注意上次的npm版本是很久以前更新的了,不过上次的Github版本我也试过了)但是我无法使用它,因为当我尝试 运行 我的应用程序时应用程序崩溃了。此外,它不会显示带有错误堆栈跟踪的红屏。我查看了日志,发现问题与 WrittableArray 有关,这里是日志
2020-05-05 06:20:49.500 5218-5306/com.freeline E/AndroidRuntime: FATAL EXCEPTION: IntentService[BeaconIntentProcessor]
Process: com.freeline, PID: 5218
java.lang.NoSuchMethodError: No interface method putArray(Ljava/lang/String;Lcom/facebook/react/bridge/WritableArray;)V in class Lcom/facebook/react/bridge/WritableMap; or its super classes (declaration of 'com.facebook.react.bridge.WritableMap' appears in /data/app/com.freeline-BgN5GbjFCm9weblBl35oBw==/base.apk)
at com.mackentoch.beaconsandroid.BeaconsAndroidModule.createRangingResponse(BeaconsAndroidModule.java:299)
at com.mackentoch.beaconsandroid.BeaconsAndroidModule.access0(BeaconsAndroidModule.java:37)
at com.mackentoch.beaconsandroid.BeaconsAndroidModule.didRangeBeaconsInRegion(BeaconsAndroidModule.java:280)
at org.altbeacon.beacon.BeaconIntentProcessor.onHandleIntent(BeaconIntentProcessor.java:68)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:76)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.os.HandlerThread.run(HandlerThread.java:65)
我找到了导致崩溃的函数,这里是:
private WritableMap createRangingResponse(Collection<Beacon> beacons, Region region) {
WritableMap map = new WritableNativeMap();
map.putString("identifier", region.getUniqueId());
map.putString("uuid", region.getId1() != null ? region.getId1().toString() : "");
WritableArray a = new WritableNativeArray();
for (Beacon beacon : beacons) {
WritableMap b = new WritableNativeMap();
b.putString("uuid", beacon.getId1().toString());
b.putInt("major", beacon.getId2().toInt());
b.putInt("minor", beacon.getId3().toInt());
b.putInt("rssi", beacon.getRssi());
b.putDouble("distance", beacon.getDistance());
b.putString("proximity", getProximity(beacon.getDistance()));
a.pushMap(b);
}
map.putArray("beacons", a); // <- The line that produces the exception
return map;
}
后来看了一堆帖子,才知道问题出在新版RN的WritableMap实现上。
所以,我的问题是:有什么方法可以解决吗,我已经解决了这个问题here。我知道将 RN 版本降级到 ^60 的可能性,但我会保留它作为最后可能的方法。
感谢您的帮助
我把RN降级到60.6版本就解决了这个问题
我用的是RN版本:“0.61.5”
问题是我装的是react-native-beacons-manager1.0.7(注意上次的npm版本是很久以前更新的了,不过上次的Github版本我也试过了)但是我无法使用它,因为当我尝试 运行 我的应用程序时应用程序崩溃了。此外,它不会显示带有错误堆栈跟踪的红屏。我查看了日志,发现问题与 WrittableArray 有关,这里是日志
2020-05-05 06:20:49.500 5218-5306/com.freeline E/AndroidRuntime: FATAL EXCEPTION: IntentService[BeaconIntentProcessor]
Process: com.freeline, PID: 5218
java.lang.NoSuchMethodError: No interface method putArray(Ljava/lang/String;Lcom/facebook/react/bridge/WritableArray;)V in class Lcom/facebook/react/bridge/WritableMap; or its super classes (declaration of 'com.facebook.react.bridge.WritableMap' appears in /data/app/com.freeline-BgN5GbjFCm9weblBl35oBw==/base.apk)
at com.mackentoch.beaconsandroid.BeaconsAndroidModule.createRangingResponse(BeaconsAndroidModule.java:299)
at com.mackentoch.beaconsandroid.BeaconsAndroidModule.access0(BeaconsAndroidModule.java:37)
at com.mackentoch.beaconsandroid.BeaconsAndroidModule.didRangeBeaconsInRegion(BeaconsAndroidModule.java:280)
at org.altbeacon.beacon.BeaconIntentProcessor.onHandleIntent(BeaconIntentProcessor.java:68)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:76)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.os.HandlerThread.run(HandlerThread.java:65)
我找到了导致崩溃的函数,这里是:
private WritableMap createRangingResponse(Collection<Beacon> beacons, Region region) {
WritableMap map = new WritableNativeMap();
map.putString("identifier", region.getUniqueId());
map.putString("uuid", region.getId1() != null ? region.getId1().toString() : "");
WritableArray a = new WritableNativeArray();
for (Beacon beacon : beacons) {
WritableMap b = new WritableNativeMap();
b.putString("uuid", beacon.getId1().toString());
b.putInt("major", beacon.getId2().toInt());
b.putInt("minor", beacon.getId3().toInt());
b.putInt("rssi", beacon.getRssi());
b.putDouble("distance", beacon.getDistance());
b.putString("proximity", getProximity(beacon.getDistance()));
a.pushMap(b);
}
map.putArray("beacons", a); // <- The line that produces the exception
return map;
}
后来看了一堆帖子,才知道问题出在新版RN的WritableMap实现上。
所以,我的问题是:有什么方法可以解决吗,我已经解决了这个问题here。我知道将 RN 版本降级到 ^60 的可能性,但我会保留它作为最后可能的方法。
感谢您的帮助
我把RN降级到60.6版本就解决了这个问题