我是 TypeTokens 的新手,我遇到了问题。我有一个装有产品的购物车,我使用 Typetoken 将这些产品保存到 Shared Preferences 中。因为我需要从 recyclerview 中删除和删除产品。这是我添加产品的内容:
Gson gson = new Gson();
String json = preferences.getString("artikujtShporta", "");
ArrayList<Artikujt> artikullObject = gson
.fromJson(json, new TypeToken<ArrayList<Artikujt>>(){}.getType());
if (artikullObject != null) {
artikullObject.add(mArtikull);
String jsonString = gson.toJson(artikullObject);
mEditor.putString("artikujtShporta", jsonString);
mEditor.apply();
} else {
ArrayList<Artikujt> arrayArtikuj = new ArrayList<>();
arrayArtikuj.add(mArtikull);
Type listOfTestObject = new TypeToken<ArrayList<Artikujt>>() {}.getType();
String s = gson.toJson(arrayArtikuj, listOfTestObject);
mEditor.putString("artikujtShporta", s);
mEditor.apply();
}
现在我需要将此对象与一些附加信息一起发送到服务器,如下所示:
private void sendBasketItemsToServer() {
//service where retrofit instance is defined for current route
ProductsService prodService = new ProductsService();
// Retrieve the product of the shopping cart which are saved in shred preferences
SharedPreferences preferences = getSharedPreferences(ITEMS_PREF, Context.MODE_PRIVATE);
SharedPreferences.Editor my_editor = preferences.edit();
String json = preferences.getString("artikujtShporta", "");
Gson gson = new Gson();
ArrayList<Artikujt> artikujt = gson
.fromJson(json, new TypeToken<ArrayList<Artikujt>>(){}.getType());
final int order_number = new Random().nextInt(26) + 75;
String date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());
// initialize requestBody
RequestBody requestBody = null;
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("klienti", full_name);
jsonObject.put("adresa", fullAddress);
jsonObject.put("produktet", artikujt);
jsonObject.put("date", date);
jsonObject.put("order_number", String.valueOf(order_number));
requestBody = RequestBody.create(String.valueOf(jsonObject),
MediaType.parse("application/json; charset=utf-8"));
System.out.println(jsonObject);
} catch (JSONException e) {
e.printStackTrace();
}
// Get token, stored in shared preferences
SharedPreferences editor = Objects.requireNonNull(getApplicationContext())
.getSharedPreferences(TOKEN_PREF, MODE_PRIVATE);
String token = editor.getString("token", "");
Callback<BasketResponse> callback = new Callback<BasketResponse>() {
@Override
public void onResponse(@NotNull Call<BasketResponse> call, Response<BasketResponse> response) {
if (response.isSuccessful()) {
// clear products added to cart
my_editor.clear();
my_editor.apply();
System.out.println(response.body());
Intent intent = new Intent(CheckoutActivity.this, SuccessOrderActivity.class);
startActivity(intent);
}
}
@Override
public void onFailure(@NotNull Call<BasketResponse> call, Throwable t) {
Toast.makeText(CheckoutActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
}
};
prodService.sendBasketItemsToServer(callback, token, requestBody);
}
所有项目都发送到服务器,我收到代码 200 作为响应,但我的产品有问题,这行:
jsonObject.put("produktet", artikujt);
是发送类的名称,而不是产品。当我在 Android Studio 中调试时,一切似乎都很好
我有两天时间弄清楚如何解决这个问题,但我不知道如何解决。有人可以建议我在这里缺少什么或我做错了什么。提前致谢。
编辑:我想向服务器发送如下 json :
{
"klienti": "my name",
"address": "my address",
"products": [
{
"id": 1,
"price": 2234,
"category": 3,
"created_at": 23-03-2020
},
{
"id": 2,
"price": 2534,
"category": 3,
"created_at": 23-03-2020
}
],
"date": 03-09-2020,
"order_number": 93
}