java - 如何从数组列表中检索特定字段值并附加到列表视图
问题描述
我以对象数组的形式从后端获取响应,并将响应存储在数组列表中,我想从 ArrayList 中检索特定字段值并将其附加到列表视图。
这是我的代码:
Retrofit retrofit = builder.build();
APIService apiservice = retrofit.create(APIService.class);
Call<PostData> call = apiservice.transactiondetails(UID);
call.enqueue(new Callback<PostData>() {
@Override
public void onResponse(@NonNull Call<PostData> call, @NonNull Response<PostData> response) {
if (response.code() == 200) { // this is the case for success
if (response.isSuccessful()) {
response.body();
// ArrayList dp = new HashMap<String, Array>();
// dp = Objects.requireNonNull(response.body()).getToken1();
ArrayList dp = Objects.requireNonNull(response.body()).getToken1();
Log.d(TAG, String.valueOf(dp));
System.out.println("hash map is" + dp);
Intent i = new Intent(deyaPay.this, TransactionDetails.class);
i.putExtra("Transactiondetails",dp);
startActivity(i);
Toast.makeText(deyaPay.this, "success" + dp, Toast.LENGTH_SHORT).show();
//Toast.makeText(getApplicationContext(), dp, Toast.LENGTH_LONG).show();
}
}
and this is class for getting the response from backend:
public class PostData {
@SerializedName("Token")
@Expose
private String token;
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
@SerializedName("Details")
@Expose
private Map<String,Array> token1;
public Map<String, Array> getToken1() {
return token1;
}
public void setToken1(Map<String,Array> token1) {
this.token1 = token1;
}
}
那么如何将响应附加到 listview,这是我来自后端的响应:
[
{
Amount = 4;
TransactionID = deyaPay;
method = "Money Sent using deyaPay";
timestamp = "2018-09-03T06:01:41.306Z";
},
{
Amount = 2;
Token = "tok_1D69olLMFuWYhKXrAqwmTprz";
TransactionID = "ch_1D69omLMFuWYhKXrYpbNEtGH";
method = "Requested by";
timestamp = "2018-09-03T04:37:40.147Z";
},
{
Amount = 5000;
TransactionID = deyaPay;
method = "Money Sent using deyaPay";
timestamp = "2018-09-03T04:01:00.565Z";
},
{
Amount = 50;
TransactionID = deyaPay;
method = "Money Sent using deyaPay";
timestamp = "2018-09-03T03:59:01.708Z";
},
{
Amount = 2;
TransactionID = deyaPay;
method = "Money Sent using deyaPay";
timestamp = "2018-09-03T03:58:26.964Z";
},
{
Amount = 1;
Token = "tok_1D68nBLMFuWYhKXrGM2AN2IF";
method = "Add Money to deyaPay account using credit card/debit card";
timestamp = "2018-09-03T03:31:58.008Z";
},
{
Amount = 5;
Token = "tok_1D68cpLMFuWYhKXrM7oc2X7j";
method = "Add Money to deyaPay account using credit card/debit card";
timestamp = "2018-09-03T03:21:16.281Z";
},
{
Amount = 2;
Token = "tok_1D5pE1LMFuWYhKXr9BMvQ1dm";
method = "Add Money to deyaPay account using credit card/debit card";
timestamp = "2018-09-02T06:38:22.188Z";
},
{
Amount = 2;
Token = "tok_1D5pCxLMFuWYhKXrJoRcbN8o";
method = "Add Money to deyaPay account using credit card/debit card";
timestamp = "2018-09-02T06:37:16.393Z";
}]
解决方案
你的 json 应该是这样的:
[{
"Amount": "4",
"Token": "tok_1D69olLMFuWYhKXrAqwmTprz",
"TransactionID": "deyaPay",
"method": "Money Sent using deyaPay",
"timestamp": "2018-09-03T06:01:41.306Z"
},
{
"Amount": "4",
"Token": "tok_1D69olLMFuWYhKXrAqwmTprz",
"TransactionID": "deyaPay",
"method": "Money Sent using deyaPay",
"timestamp": "2018-09-03T06:01:41.306Z"
},
{
"Amount": "4",
"Token": "tok_1D69olLMFuWYhKXrAqwmTprz",
"TransactionID": "deyaPay",
"method": "Money Sent using deyaPay",
"timestamp": "2018-09-03T06:01:41.306Z"
},
{
"Amount": "4",
"Token": "tok_1D69olLMFuWYhKXrAqwmTprz",
"TransactionID": "deyaPay",
"method": "Money Sent using deyaPay",
"timestamp": "2018-09-03T06:01:41.306Z"
},
{
"Amount": "4",
"Token": "tok_1D69olLMFuWYhKXrAqwmTprz",
"TransactionID": "deyaPay",
"method": "Money Sent using deyaPay",
"timestamp": "2018-09-03T06:01:41.306Z"
},
{
"Amount": "4",
"Token": "tok_1D69olLMFuWYhKXrAqwmTprz",
"TransactionID": "deyaPay",
"method": "Money Sent using deyaPay",
"timestamp": "2018-09-03T06:01:41.306Z"
},
{
"Amount": "4",
"Token": "tok_1D69olLMFuWYhKXrAqwmTprz",
"TransactionID": "deyaPay",
"method": "Money Sent using deyaPay",
"timestamp": "2018-09-03T06:01:41.306Z"
},
{
"Amount": "4",
"Token": "tok_1D69olLMFuWYhKXrAqwmTprz",
"TransactionID": "deyaPay",
"method": "Money Sent using deyaPay",
"timestamp": "2018-09-03T06:01:41.306Z"
},
{
"Amount": "4",
"Token": "tok_1D69olLMFuWYhKXrAqwmTprz",
"TransactionID": "deyaPay",
"method": "Money Sent using deyaPay",
"timestamp": "2018-09-03T06:01:41.306Z"
}
]
你的响应应该是一个对象数组。那就是你得到的错误,当响应是一个数组时,你试图解析一个对象。
在您的 listview 适配器中,您使用 arraylist 中的值将文本设置为项目:
amount.setText(data.get(position).getAmount());
token.setText(data.get(position).getToken());
我在这里给你一个例子,说明如何使用你需要的自定义适配器实现列表视图:https ://medium.com/mindorks/custom-array-adapters-made-easy-b6c4930560dd
推荐阅读
- puppeteer - 使用 puppeteer login gmail get 无法登录
- javascript - PWA,Service Worker 错误:“Internet 连接似乎处于脱机状态”
- regex - 如何使用正则表达式捕获包含一个或多个任意单词的多个组
- docker - Dockerfile RUN 命令损坏。我如何正确逃避它?
- android - 在edittext中更改背景会导致框的宽度等于0
- python - 无法使用 sklearn 的 joblib 加载泡菜文件
- r - 绘制 R 中单列的总和
- javascript - 不使用 MongoDB 中的 req.body 从 DB 更新字段值
- python - 如何在 python 中为“optimize.minimize”定义边界?
- python - Matplotlib 不显示图表值