簡體   English   中英

java.lang.IllegalStateException:預期為 BEGIN_OBJECT,但在第 1 行第 3 列路徑 $ 處為 STRING

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM