EN VI

Android - How to access data class result object from a sealed interface?

2024-03-14 14:00:04
Android - How to access data class result object from a sealed interface

The library i'm using is using a sealed interface and data class.

Library:

This is the interface from the library:

public sealed interface TransactionProcessingResult {
public final data class Approved public constructor(authorisationResponse: kotlin.String, authorisationResponseDetails: kotlin.String, receiptData: com...models.ProcessedTransactionReceiptData) : com...models.TransactionProcessingResult {
    public final val authorisationResponse: kotlin.String /* compiled code */

    public final val authorisationResponseDetails: kotlin.String /* compiled code */

    public final val receiptData: com...models.ProcessedTransactionReceiptData /* compiled code */

    public final operator fun component1(): kotlin.String { /* compiled code */ }

    public final operator fun component3(): com...models.ProcessedTransactionReceiptData { /* compiled code */ }

    public open operator fun equals(other: kotlin.Any?): kotlin.Boolean { /* compiled code */ }

    public open fun hashCode(): kotlin.Int { /* compiled code */ }

    public open fun toString(): kotlin.String { /* compiled code */ }
}

public final data class ApprovedWithSignature public constructor(authorisationResponse: kotlin.String, authorisationResponseDetails: kotlin.String, receiptData: com...models.ProcessedTransactionReceiptData) : com...models.TransactionProcessingResult {
    public final val authorisationResponse: kotlin.String /* compiled code */

    public final val authorisationResponseDetails: kotlin.String /* compiled code */

    public final val receiptData: com...models.ProcessedTransactionReceiptData /* compiled code */

    public final operator fun component1(): kotlin.String { /* compiled code */ }

    public final operator fun component3(): com...models.ProcessedTransactionReceiptData { /* compiled code */ }

    public open operator fun equals(other: kotlin.Any?): kotlin.Boolean { /* compiled code */ }

    public open fun hashCode(): kotlin.Int { /* compiled code */ }

    public open fun toString(): kotlin.String { /* compiled code */ }
}

public final data class NotApproved public constructor(authorisationResponse: kotlin.String, authorisationResponseDetails: kotlin.String, receiptData: com...models.ProcessedTransactionReceiptData) : com...models.TransactionProcessingResult {
    public final val authorisationResponse: kotlin.String /* compiled code */

    public final val authorisationResponseDetails: kotlin.String /* compiled code */

    public final val receiptData: com...ProcessedTransactionReceiptData /* compiled code */

    public final operator fun component1(): kotlin.String { /* compiled code */ }

    public final operator fun component3(): com...models.ProcessedTransactionReceiptData { /* compiled code */ }

    public open operator fun equals(other: kotlin.Any?): kotlin.Boolean { /* compiled code */ }

    public open fun hashCode(): kotlin.Int { /* compiled code */ }

    public open fun toString(): kotlin.String { /* compiled code */ }
}

}

This is the method I'm calling from the library.

public abstract fun startPurchaseTransaction(amount: kotlin.Long, otherAmount: kotlin.Long, currency: java.util.Currency, metadata: kotlin.String, surchargeEnabled: kotlin.Boolean, tippingEnabled: kotlin.Boolean, onSuccess: com...Success<com...models.TransactionProcessingResult>, onFailure: com...api.Failure<com...api.models.TransactionProcessingError>): kotlin.Unit

Usage:

startPurchaseTransaction(
            500,                     //Amount
            0,                         //Other amount
            nzdCurrency,               //Currency
            "This is metadata",        // metadata
            false,                     //Tipping disabled
            true,                      //Surcharge enabled

            //Success
            (result) -> {
                //how to access result as object/class
                
            },

            //Failure
            error -> {
                //how to access error as object/class
                
            }
    );

On success, I want to identify if it was Approved, ApprovedWithSignature or NotAprroved, Is it possible to access/cast result to a data class?, I need to access the result variable so that I can get the details I needed like the authorisationResponseDetails & receiptData.

Solution:

Just use is to check the type

 when(result)  {
    is Approved -> //code
    is NotApproved ->//code
  }
Answer

Login


Forgot Your Password?

Create Account


Lost your password? Please enter your email address. You will receive a link to create a new password.

Reset Password

Back to login