java - 使用 GSON 在 Volley 中发送参数
问题描述
我所知道
的我可以在JsonObjectRequest
使用Volley
without的帮助下提出请求GSON
。现在我正在学习,GSON
所以我可以在没有参数的情况下发出请求。
示例代码
HashMap<String, String> params = new HashMap<String, String>();
params.put("user",userId);
Log.d(TAG + "pp", String.valueOf(params));
String Url = Constants.Base_URL + "getcoupons/";
JsonObjectRequest request = new JsonObjectRequest(Url, new JSONObject(params),
response -> {
Log.d(TAG, "respCoupan" + String.valueOf(response));
try {
String statusResponseObject = response.getString("status");
String msgObject = response.getString("msg");
if (statusResponseObject.equals("200")){
JSONArray jsonArray = response.getJSONArray("response");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject pendingFragResponse = jsonArray.getJSONObject(i);
String codeObject = pendingFragResponse.getString("code");
String typeObject = pendingFragResponse.getString("type");
String amountObject = pendingFragResponse.getString("amount");
String descriptionObject = pendingFragResponse.getString("description");
String leagueObject = pendingFragResponse.getString("league");
String expireObject = pendingFragResponse.getString("expire");
//
couponArrayList.add(new Coupon(codeObject, typeObject, amountObject,
descriptionObject, leagueObject, expireObject));
couponAdapter = new CouponAdapter( couponArrayList, CoupanActivity.this);
recyclerView.setAdapter(couponAdapter);
wp10ProgressBar.hideProgressBar();
wp10ProgressBar.setVisibility(View.GONE);
}
couponAdapter.notifyDataSetChanged();
// wp10ProgressBar.hideProgressBar();
}else {
wp10ProgressBar.hideProgressBar();
wp10ProgressBar.setVisibility(View.GONE);
Toast.makeText(CoupanActivity.this, msgObject, Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(this, "Server didn't response, Try after some time", Toast.LENGTH_LONG).show();
}
}, error -> {
error.printStackTrace();
Log.d(TAG + "error", String.valueOf(error.getMessage()));
Toast.makeText(this, "Server didn't response, Try after some time", Toast.LENGTH_LONG).show();
});
MySingleton.getInstance(CoupanActivity.this).addToRequestQueue(request);
JSON
{
"status": "200",
"msg": "Successfully",
"response": [
{
"code": "YUDH20",
"type": "Flat",
"amount": "2",
"description": "Flat 20% credit Discount",
"league": "0",
"league_name": "",
"expire": "2019-08-22"
}
]
}
我想要的是
我想要一个清晰的示例来使用 GSON 和 Parameter 发出请求(意味着使用 GSON 在请求中发送 Hashmap 值)。
我可以GSON
用于java类的参数吗?
如何将 GSON 用于标头?
解决方案
您必须创建数据类“ ModelClass ”和ResponseClass gson 将您的数据转换为“ModelClass”,您可以简单地使用此类:
public class ModelClass {
private String status;
private String msg;
private JSONArray response;
...
}
并创建一个ResponseClass.class
public class ResponseClass {
private String code;
private String type;
private int amount;
private String description;
private String league;
private String league_name;
private String expire;
...
}
并将您的代码更改为:
HashMap<String, String> params = new HashMap<String, String>();
params.put("user", userId);
Log.d(TAG + "pp", String.valueOf(params));
String Url = SyncStateContract.Constants.Base_URL + "getcoupons/";
JsonObjectRequest request = new JsonObjectRequest(Url, new JSONObject(params),
response -> {
Log.d(TAG, "respCoupan" + String.valueOf(response));
try {
Gson gson = new GsonBuilder()
.serializeNulls()
.create();
Type type = new TypeToken<ModelClass>() {
}.getType();
ModelClass result = gson.fromJson(response.toString(), type);
if (result.getMsg().equals("200")) {
for (int i = 0; i < result.getResponse().size(); i++) {
result.getResponse().get(i).getAmount()
result.getResponse().get(i).getCode()
result.getResponse().get(i).getExpire()
...
}}
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(this, "Server didn't response, Try after some time", Toast.LENGTH_LONG).show();
}
}, error -> {
error.printStackTrace();
Log.d(TAG + "error", String.valueOf(error.getMessage()));
Toast.makeText(this, "Server didn't response, Try after some time", Toast.LENGTH_LONG).show();
});
MySingleton.getInstance(CoupanActivity.this).addToRequestQueue(request);
推荐阅读
- asp.net-core - AspNet Core 3.0-3.1 无法捕获未处理的异常(应用程序崩溃)
- discord - Discord.js 将 DM 消息转发到特定频道
- dockerfile - GeoServer is not recognizing the copied gwc-layers files
- javascript - d3、更新多条路径
- reporting-services - Sum 出现两次
- kotlin - 如何使 CoroutineContext.Element 不通过 Kotlin 中的启动/异步传播
- python - 如何使用 ffmpeg-python 库下载带有使用 streamlink 库检索的链接的 Twitch VOD
- node.js - Flutter 无法连接到套接字服务器
- c# - 找出哪些 pdf 文件缺少字体
- google-app-engine - CRMint Deployment Issue - IndexError: tuple index out of range