Я бы предложил использовать обещание.
В вашем нативном модуле есть свойство как Promise mPromise;
(также включает import com.facebook.react.bridge.Promise;
) и примите обещание в вашем собственном методе реагирования как
@ReactMethod
public void showPayuBiz(Promise promise) {
mPromise = promise;
final Activity activity = getCurrentActivity();
Intent intent = new Intent(activity, PayuActivity.class);
getReactApplicationContext().startActivity(intent);
}
Ив вашем onActivityResult
вы можете использовать его следующим образом.
@Override
public void onActivityResult(int requestCode, int resultCode, final Intent data)
{
if (requestCode == PayuConstants.PAYU_REQUEST_CODE) {
//example for handling success response
this.promise.resolve(data.getDataString()); // you can further process this data in react native component.
}
else{
//example for handling error response
this.promise.reject(data.getDataString());
}
}
Затем вы можете использовать его следующим образом
PayUBizAccess.showPayuBiz()
.then(data => {
console.log(data);
//success
})
.catch(error => {
console.log(data);
//failure
});
Редактировать
Если onActivityResult()
находится вдругой файл.добавьте mReactInstanceManager.onActivityResult(requestCode, resultCode, data);
в onActivityResult()
, который находится в MainActivity
.
И внутри вашего собственного модуля добавьте следующий метод.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
this.mPromise.resolve(data.getDataString());
}