![](/img/trans.png)
[英]JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 3 path $[0]
[英]java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 3 path $
我正在開發一個電子商務應用程序,所以我需要在 android studio 中創建一個帶有 sharedpreference 的cartManager。 我創建了 Map<Item,itemCount> 的 json 字符串,然后將該字符串放入 sharedpreferences 一切正常,但在 getCartItem() 中我收到此錯誤 -
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:預期為 BEGIN_OBJECT,但在第 1 行第 3 列路徑 $ 處為 STRING。
我已經編寫了下面所有相關的代碼。 我是android studio的新手請幫助我。
這是布局(Increment decrement carmanager value)
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<androidx.cardview.widget.CardView
android:id="@+id/cardViewDec"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:cardCornerRadius="8dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="12dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="12dp"
android:layout_marginBottom="8dp"
android:gravity="center"
android:text="-"
android:textColor="@color/black" />
</androidx.cardview.widget.CardView>
<TextView
android:id="@+id/textViewItemCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="0"
android:textColor="@color/black" />
<androidx.cardview.widget.CardView
android:id="@+id/cardViewInc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:cardCornerRadius="8dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="12dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="12dp"
android:layout_marginBottom="8dp"
android:gravity="center"
android:text="+"
android:textColor="@color/black" />
</androidx.cardview.widget.CardView>
</LinearLayout>
這是購物車管理器
public class CartManager {
private static final String CART_ITEMS = "cartItems";
private static SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(App.getApp());
public static void setCartItems(Map<Item, Integer> mapCartItem) {
SharedPreferences.Editor editor = preferences.edit();
Gson gson = new Gson();
String jsonCartItems = gson.toJson(mapCartItem);
editor.putString(CART_ITEMS, jsonCartItems);
editor.apply();
}
public static Map<Item, Integer> getCartItems() {
String json = preferences.getString(CART_ITEMS, null);
Gson gson = new Gson();
Type collectionType = new TypeToken<Map<Item, Integer>>() {
}.getType();
return gson.fromJson(json, collectionType);
}
這是活動課
binding.cardViewInc.setOnClickListener(v -> {
int itemCount = Integer.parseInt(binding.textViewItemCount.getText().toString());
vibrator.vibrate(200);
binding.textViewItemCount.setText(String.valueOf(++itemCount));
if (CartManager.getCartItems() != null) {
Map<Item, Integer> cart = CartManager.getCartItems();
Log.d(TAG, "onCreate: " + cart);
cart.put(item, itemCount);
CartManager.setCartItems(cart);
} else {
Map<Item, Integer> cart = new HashMap<>();
cart.put(item, itemCount);
CartManager.setCartItems(cart);
}
});
binding.cardViewDec.setOnClickListener(v -> {
int itemCount = Integer.parseInt(binding.textViewItemCount.getText().toString());
if (itemCount == 0)
return;
vibrator.vibrate(200);
binding.textViewItemCount.setText(String.valueOf(--itemCount));
Map<Item, Integer> cart = CartManager.getCartItems();
Log.d(TAG, "onCreate: " + cart);
cart.put(item, itemCount);
CartManager.setCartItems(cart);
});
這是我現在遇到的錯誤
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 3 path $.
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:186)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
at com.google.gson.Gson.fromJson(Gson.java:927)
at com.google.gson.Gson.fromJson(Gson.java:892)
at com.google.gson.Gson.fromJson(Gson.java:841)
at com.account.CartManager.getCartItems(CartManager.java:31)
at com.activities.ProductActivity.lambda$onCreate$1$ProductActivity(ProductActivity.java:61)
at com.activities.-$$Lambda$ProductActivity$eIp-9al-fb-L4Pi9XbJi9DUaRDU.onClick(Unknown Source:6)
at android.view.View.performClick(View.java:7184)
at android.view.View.performClickInternal(View.java:7161)
at android.view.View.access$3500(View.java:818)
at android.view.View$PerformClick.run(View.java:27677)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7562)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 3 path $.
at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:215)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:186)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
at com.google.gson.Gson.fromJson(Gson.java:927)
at com.google.gson.Gson.fromJson(Gson.java:892)
at com.google.gson.Gson.fromJson(Gson.java:841)
at com.account.CartManager.getCartItems(CartManager.java:31)
at com.activities.ProductActivity.lambda$onCreate$1$ProductActivity(ProductActivity.java:61)
at com.activities.-$$Lambda$ProductActivity$eIp-9al-fb-L4Pi9XbJi9DUaRDU.onClick(Unknown Source:6)
at android.view.View.performClick(View.java:7184)
at android.view.View.performClickInternal(View.java:7161)
at android.view.View.access$3500(View.java:818)
at android.view.View$PerformClick.run(View.java:27677)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7562)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
2021-06-19 08:51:50.623 30179-30179/com I/Process: Sending signal. PID: 30179 SIG: 9
這是我得到的 jsonString
{"Item{_id\u003d\u002760c8bfc64a5f0e3f042cb674\u0027, name\u003d\u0027fff\u0027, price\u003d888, size\u003d6, discount\u003d888, color\u003d\u0027Black\u0027, deliveryFee\u003d88, imageUrl\u003d\u0027https://firebasestorage.googleapis.com/v0/b/shoes-footwear.appspot.com/o/items%2F1623769024945?alt\u003dmedia\u0026token\u003d6094d72b-2f98-483a-a9e5-0d39d13ce066\u0027, gender\u003d0, createdAt\u003d0}":1}
問題是您正在嘗試解析JSON
對象,但您的 JSON 響應中有String
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.