gpt4 book ai didi

android - 如何将 HTTP 可调用云函数响应转换为 POJO?

转载 作者:行者123 更新时间:2023-11-30 05:08:22 25 4
gpt4 key购买 nike

 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() 转换为 Data 对象时,它给出了 java.lang.ClassCastException 。我检查了 Data 类中的所有字段并返回 json 对象的字段他们很相似。 我也尝试过将它从 json 转换为如下所示

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

它给出错误 com.google.gson.JsonSyntaxException: com.google.gson.stream:MalfromedJsonException:Unterminated Object at line 1 column 74 path $.CALLBACK_URL

注意-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}

在 Cloud Function##(所有字段都是字符串)

 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,
};

最佳答案

可调用云函数以字符串形式返回 JSON 数据。它们不执行 POJO 的编码/解码,因此您必须自己在客户端代码中映射字段。

我实际上认为从 JSON 自动解码 POJO 是一个很好的功能,因为 Firebase 实时数据库和 Cloud Firestore 已经这样做了。我推荐你file a feature request为此。

关于android - 如何将 HTTP 可调用云函数响应转换为 POJO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54148897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com