Java Question onActivityResult: wi is null

somed3v3loper

Well-Known Member
Licensed User
Longtime User
Hi all ,
I am trying to wrap rave on their documentation the result is passed via onactivityresult
I tried both methods described in this thread https://www.b4x.com/android/forum/threads/java-guide-using-onactivityresult.7297/ but could not get the result
I am getting onActivityResult: wi is null
In the calling activity, override the onActivityResult method to receive the payment response as shown below

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
/*
* We advise you to do a further verification of transaction's details on your server to be
* sure everything checks out before providing service or goods.
*/
if (requestCode == RaveConstants.RAVE_REQUEST_CODE && data != null) {
String message = data.getStringExtra("response");
if (resultCode == RavePayActivity.RESULT_SUCCESS) {
Toast.makeText(this, "SUCCESS " + message, Toast.LENGTH_SHORT).show();
}
else if (resultCode == RavePayActivity.RESULT_ERROR) {
Toast.makeText(this, "ERROR " + message, Toast.LENGTH_SHORT).show();
}
else if (resultCode == RavePayActivity.RESULT_CANCELLED) {
Toast.makeText(this, "CANCELLED " + message, Toast.LENGTH_SHORT).show();
}
}
else {
super.onActivityResult(requestCode, resultCode, data);
}
}
 

somed3v3loper

Well-Known Member
Licensed User
Longtime User
Post the class code.
B4X:
@ActivityObject
public class raveandroidwrapper  {
    private BA ba;   
    private String eventName;
    private IOnActivityResult ion;
    public void Initialize(BA ba , String EventName ) {
        _initialize(ba,  EventName);
        
    }


                
                
    @Hide
    public void _initialize(final BA ba,final String EventName) {
        this.ba = ba;
        this.eventName = EventName.toLowerCase(BA.cul);
        
        }
        public SubAccount createSubAccount(String vendorRef,String vendorRatio){
            return new SubAccount(vendorRef,vendorRatio);
        }
        
        public void initializePayment(long amount,String country,String currency,String email, String fName, String lName, String narration, String publicKey, String encryptionKey, String txRef,boolean acceptMpesaPayments,  boolean acceptAccountPayments,boolean acceptCardPayments ,boolean  acceptAchPayments,boolean acceptGHMobileMoneyPayments ,boolean acceptUgMobileMoneyPayments,boolean acceptZmMobileMoneyPayments, boolean acceptRwfMobileMoneyPayments,boolean acceptBankTransferPayments,boolean isPreAuth,boolean showStagingLabel,boolean shouldDisplayFee,boolean onStagingEnv ,     anywheresoftware.b4a.objects.collections.List subAccounts){
        
        List<Object> list = subAccounts.getObject();
        List<SubAccount> listba = new ArrayList<>() ;
        for (Object element : list) {
            
            listba.add((SubAccount) element);
        }
            
            new RavePayManager(ba.activity).setAmount(amount)
                    .setCountry(country)
                    .setCurrency(currency)
                    .setEmail(email)
                    .setfName(fName)
                    .setlName(lName)
                    .setNarration(narration)
                    .setPublicKey(publicKey)
                    .setEncryptionKey(encryptionKey)
                    .setTxRef(txRef)
                    .acceptMpesaPayments(acceptMpesaPayments)
                    .acceptAccountPayments(acceptAccountPayments)
                    .acceptCardPayments(acceptCardPayments)
                    .acceptAchPayments(acceptAchPayments)
                    .acceptGHMobileMoneyPayments(acceptGHMobileMoneyPayments)
                    .acceptUgMobileMoneyPayments(acceptUgMobileMoneyPayments)
                    .acceptZmMobileMoneyPayments(acceptZmMobileMoneyPayments)
                    .acceptRwfMobileMoneyPayments(acceptRwfMobileMoneyPayments)
                    .acceptBankTransferPayments(acceptBankTransferPayments)
                    .onStagingEnv(onStagingEnv)
                    .setSubAccounts(listba)
                    .isPreAuth(isPreAuth)
                    .showStagingLabel(showStagingLabel)
                    .shouldDisplayFee(shouldDisplayFee)
                    .initialize();
                    
                    

                 ion = new IOnActivityResult() {

                @SuppressWarnings("unchecked")
                @Override
                public void ResultArrived(int resultCode, Intent intent) {
                    
                    
                    IntentWrapper iw = new IntentWrapper();
                    iw.setObject(intent);
                    ba.raiseEvent(ba, eventName + "_resultarrived", true, iw);
                    }
                    //

                
                };
                    try {
                          
                         ba.startActivityForResult(ion, null);
                      } catch (NullPointerException npe) {
                         //required...
                      }
                      BA.Log(BA.ObjectToString(ba));
                      BA.SharedProcessBA sba = ba.sharedProcessBA;
                      try {
                         Field f = BA.SharedProcessBA.class.getDeclaredField("onActivityResultCode");
                         f.setAccessible(true);
                         //BA.Log("sba"+f.getInt(sba));
                        // int requestCode = f.getInt(sba) - 1;
                        
                      } catch (Exception e) {
                         throw new RuntimeException(e);
                      }
                    
                    

        }

    
    }
Uncommenting int requestCode = f.getInt(sba) - 1; resulted in
B4X:
ndroidwrapperpackage.raveandroidwrapperinitializePayment (java line: 161)
java.lang.RuntimeException: java.lang.NullPointerException: null receiver
    at smm.raveandroidwrapperpackage.raveandroidwrapper.initializePayment(raveandroidwrapper.java:161)
    at smm.rave.main._activity_create(main.java:344)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:196)
    at smm.rave.main.afterFirstLayout(main.java:104)
    at smm.rave.main.access$000(main.java:17)
    at smm.rave.main$WaitForLayout.run(main.java:82)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6718)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.NullPointerException: null receiver
    at java.lang.reflect.Field.getInt(Native Method)
    at smm.raveandroidwrapperpackage.raveandroidwrapper.initializePayment(raveandroidwrapper.java:158)
    ... 13 more
 

Johan Schoeman

Expert
Licensed User
Longtime User
Top