Как преобразовать ответ вызываемой функции облака HTTP в POJO? - PullRequest
0 голосов
/ 11 января 2019
 mFunctions
            .getHttpsCallable("addMessage")
            .call(`data`)
            .continueWith(new Continuation<HttpsCallableResult, Data>() {
                @Override
                public Data then(@NonNull Task<HttpsCallableResult> task) throws Exception {
                    // This continuation runs on either success or `failure`, but if the task
                    // has failed then getResult() will throw an Exception which will be
                    // propagated down.
                    Data result = (Data) task.getResult().getData();
                    return result;
                }
            }).addOnCompleteListener(new OnCompleteListener<Data>() {
            @Override
            public void onComplete(@NonNull Task<Data> task) {
                if (!task.isSuccessful()) {
                    Exception e = task.getException();
                    if (e instanceof FirebaseFunctionsException) {
                        FirebaseFunctionsException ffe = (FirebaseFunctionsException) e;
                        FirebaseFunctionsException.Code code = ffe.getCode();
                        Object details = ffe.getDetails();
                    }

                    // ...
                }

                // ...
            }
        });

Когда я приводю объект ответа task.getResult().getData() к объекту данных, он дает java.lang.ClassCastException. У меня есть проверка всех полей в классе данных и при возврате полей объекта json они похожи. Я также пытался преобразовать его из json, как показано ниже

  Data result =new Gson.jsonFrom(task.getResult().getData().toString(),Data.class);

Выдает ошибку com.google.gson.JsonSyntaxException: com.google.gson.stream:MalfromedJsonException:Unterminated Объект в строке 1 столбца 74 путь $ .CALLBACK_URL

Note-CALLBACK_URL - это поле в объекте json, которое возвращается облачной функцией, а CALLBACK_URL содержит URL

ОБНОВЛЕНО

Класс данных

import com.google.gson.annotations.SerializedName;

public class Data{
    @SerializedName("MID")
    private  String MID;
    @SerializedName("ORDER_ID")
    private String ORDER_ID;
    @SerializedName("CHANNEL_ID")
    private String CHANNEL_ID;
    @SerializedName("CUST_ID")
    private String CUST_ID;
    @SerializedName("MOBILE_NO")
    private String MOBILE_NO;
    @SerializedName("EMAIL")
    private String EMAIL;
    @SerializedName("TXN_AMOUNT")
    private String TXN_AMOUNT;
    @SerializedName("WEBSITE")
    private String WEBSITE;
    @SerializedName("INDUSTRY_TYPE_ID")
    private String INDUSTRY_TYPE_ID;
    @SerializedName("SHOP_ID")
    private String SHOP_ID;
    @SerializedName("CHECKSUMHASH")
    private String CHECKSUMHASH;





    public Data(){}

    public Data(String MID, String ORDER_ID, String CHANNEL_ID, String CUST_ID, String MOBILE_NO, String EMAIL, String TXN_AMOUNT, String WEBSITE, String INDUSTRY_TYPE_ID, String SHOP_ID, String CHECKSUMHASH) {
        this.MID = MID;
        this.ORDER_ID = ORDER_ID;
        this.CHANNEL_ID = CHANNEL_ID;
        this.CUST_ID = CUST_ID;
        this.MOBILE_NO = MOBILE_NO;
        this.EMAIL = EMAIL;
        this.TXN_AMOUNT = TXN_AMOUNT;
        this.WEBSITE = WEBSITE;
        this.INDUSTRY_TYPE_ID = INDUSTRY_TYPE_ID;
       // this.CALLBACK_URL = CALLBACK_URL;
        this.SHOP_ID = SHOP_ID;
        this.CHECKSUMHASH = CHECKSUMHASH;
    }

    public String getMID() {
        return MID;
    }

    public void setMID(String MID) {
        this.MID = MID;
    }

    public String getORDER_ID() {
        return ORDER_ID;
    }

    public void setORDER_ID(String ORDER_ID) {
        this.ORDER_ID = ORDER_ID;
    }

    public String getCHANNEL_ID() {
        return CHANNEL_ID;
    }

    public void setCHANNEL_ID(String CHANNEL_ID) {
        this.CHANNEL_ID = CHANNEL_ID;
    }

    public String getCUST_ID() {
        return CUST_ID;
    }

    public void setCUST_ID(String CUST_ID) {
        this.CUST_ID = CUST_ID;
    }

    public String getMOBILE_NO() {
        return MOBILE_NO;
    }

    public void setMOBILE_NO(String MOBILE_NO) {
        this.MOBILE_NO = MOBILE_NO;
    }

    public String getEMAIL() {
        return EMAIL;
    }

    public void setEMAIL(String EMAIL) {
        this.EMAIL = EMAIL;
    }

    public String getTXN_AMOUNT() {
        return TXN_AMOUNT;
    }

    public void setTXN_AMOUNT(String TXN_AMOUNT) {
        this.TXN_AMOUNT = TXN_AMOUNT;
    }

    public String getWEBSITE() {
        return WEBSITE;
    }

    public void setWEBSITE(String WEBSITE) {
        this.WEBSITE = WEBSITE;
    }

    public String getINDUSTRY_TYPE_ID() {
        return INDUSTRY_TYPE_ID;
    }

    public void setINDUSTRY_TYPE_ID(String INDUSTRY_TYPE_ID) {
        this.INDUSTRY_TYPE_ID = INDUSTRY_TYPE_ID;
    }

//   public String getCALLBACK_URL() {
//        return CALLBACK_URL;
//    }
//
//    public void setCALLBACK_URL(String CALLBACK_URL) {
//        this.CALLBACK_URL = CALLBACK_URL;
//    }

    public String getSHOP_ID() {
        return SHOP_ID;
    }

    public void setSHOP_ID(String SHOP_ID) {
        this.SHOP_ID = SHOP_ID;
    }

    public String getCHECKSUMHASH() {
        return CHECKSUMHASH;
    }

    public void setCHECKSUMHASH(String CHECKSUMHASH) {
        this.CHECKSUMHASH = CHECKSUMHASH;
    }
}

и сообщение журнала

Log.d ( "kkkkkkkkkkkkkkkkkk", task.getResult () GetData () ToString ()..);
печать

kkkkkkkkkkkkkkkkkk: {EMAIL=ak1542031@gmail.com, MID=xyzSta77011978730175, TXN_AMOUNT=150, ORDER_ID=0PFcGDgAZEgsVglWq9ms, WEBSITE=WEBSTAGING, INDUSTRY_TYPE_ID=Retail, MOBILE_NO=99821144556, SHOP_ID=VxHEt4fSvoQqIVyZ9x1mcNbWoxU2, CHECKSUMHASH=xl/gl/vSTEbL1UrDZB8Pv46HZZUppGnjqFPU6b/gqA/4oHl9oLBawZgqWd9CWiyspIT3j/jwJdlR7aOa6uXiZ2BqeGKDIUNQ9t6CKH6fQ84=, CHANNEL_ID=WAP, CUST_ID=VxHEt4fSvoQqIVyZ9x1mcNbWoxU2}

В облачной функции ## (все поля строковые)

 return {
                MID: paytm_config.MID,
                ORDER_ID: sOrderId,
                CHANNEL_ID: paytm_config.CHANNEL_ID,
                CUST_ID: context.auth.uid,
                MOBILE_NO: data.uPhNumber,
                EMAIL: user.email,
                TXN_AMOUNT: serviceTMS.price + '',
                WEBSITE: paytm_config.WEBSITE,
                INDUSTRY_TYPE_ID: paytm_config.INDUSTRY_TYPE_ID,
                // CALLBACK_URL:'https://securegw-stage.paytm.in/theia/paytmCallback?ORDER_ID='+sOrderId,
                SHOP_ID: data.shopId,
                CHECKSUMHASH: checkSumT,
            };

1 Ответ

0 голосов
/ 11 января 2019

Функции Callable Cloud возвращают данные JSON в виде строки. Они не выполняют кодирование / декодирование POJO, поэтому вам придется сопоставлять поля самостоятельно в коде на стороне клиента.

Я действительно думаю, что автоматическое декодирование POJO из JSON было бы хорошей функцией, учитывая, что база данных Firebase Realtime и Cloud Firestore уже делают это. Я рекомендую вам подать запрос функции для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...