React Native - Value' 3130049174'不适合32位有符号的int

时间:2017-02-24 16:54:26

标签: java android react-native int native

我试图通过传递URL中的一些值来调用API - 这在iOS上工作正常但在Android上中断。

e.g。 api/v1/betslip/6/113672/669203/149/3130049174?product_id=5

3130049174会导致错误:

enter image description here

错误是从https://github.com/mhallcouk/stopwatch/blob/master/node_modules/react-native/ReactAndroid/src/main/jni/xreact/jni/ReadableNativeMap.cpp

中的第54行触发的

所以它在integer != javaint

失败了

以下是完整代码:

getBetslipApi(settingsObj, 113672, 669203, 149, 3130049174)



export function getBetslipApi(settings, eventID, marketID, rsID, partnerID) {
//THE RSID IS THE VALUE CAUSING THE ERROR - 3130049174

const url = settings.api+"v1/betslip/"+settings.sport_id+"/"+eventID+"/"+marketID+"/"+partnerID+"/"+rsID+"?product_id="+settings.product_id;


return (dispatch) => {
    dispatch(getBetslip());
    axios.get(url, {
        headers: {'Cache-Control': 'max-age='+settings.api_cache_time},
        timeout: settings.api_timeout
    })
       //THIS DOES NOT TRIGGER
        .then((data) => {
            console.log(data)
            if(data.success) {
                const url = data.data.betslip
                Linking.canOpenURL(url).then(supported => {
                    if (!supported) {
                        console.log('Error opening external URL: ' + url);
                        return Linking.openURL(url);
                    } else {
                        return Linking.openURL(url);
                    }
                }).catch(err => console.error('An error occurred', err));
                dispatch(getBetslipSuccess(data.data))
            }else {
                apiError(data, url);
                dispatch(getBetslipFailure(data));
            }
        })
        .catch(function (error) {
            console.log(error)
            apiError(error, url);
            dispatch(getBetslipFailure(error));
        });
}

}

2 个答案:

答案 0 :(得分:2)

3,130,049,174对于带符号的32位整数来说太大了。 maximum value for a signed integer in Java为2,147,483,647(2 ^ 31 -1)。

答案 1 :(得分:1)

int是一个32位有符号整数,表示它的最小值为2 ^ -31,最大值为2 ^ 31-1

3130049174是一个超出范围的数字,这就是造成这个问题的原因。您可以使用doubleInteger包装类来避免此问题。