Tencent / MMKV

An efficient, small mobile key-value storage framework developed by WeChat. Works on Android, iOS, macOS, Windows, and POSIX.
Other
17.28k stars 1.9k forks source link

Exception thown when encode an empty string using MMKV flutter plugin #629

Closed CreeperSan closed 3 years ago

CreeperSan commented 3 years ago

The language of MMKV

dart

The version of MMKV

1.2.8

The platform of MMKV

Flutter

The installation of MMKV

e.g. Cocoapods, Carthage, Maven, AAR Package or Git clone

What's the issue?

Can not set an empty string into mmkv.

                  MMKV.initialize().then((value){
                    print('path : $value');
                    MMKV mmkv = MMKV('test_empty_string');
                    mmkv.encodeString('empty_string', 'value');
                    mmkv.encodeString('empty_string', '');   // Exception thrown
                  });

What's the log of MMKV when that happened?

Syncing files to device MI 6... W/.fluttertestap(18054): Accessing hidden method Lsun/misc/Unsafe;->getUnsafe()Lsun/misc/Unsafe; (greylist,core-platform-api, linking, allowed) W/.fluttertestap(18054): Accessing hidden method Lsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J (greylist,core-platform-api, linking, allowed) W/.fluttertestap(18054): Accessing hidden method Lsun/misc/Unsafe;->compareAndSwapObject(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z (greylist, linking, allowed) W/.fluttertestap(18054): Accessing hidden method Lsun/misc/Unsafe;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V (greylist, linking, allowed) I/MMKV (18054): version v1.2.7 page size:4096 I/MMKV (18054): armv8 AES instructions is supported I/MMKV (18054): armv8 CRC32 instructions is supported I/MMKV (18054): root dir: /data/user/0/com.example.fluttertestapp/app_flutter/mmkv I/flutter (18054): path : /data/user/0/com.example.fluttertestapp/app_flutter/mmkv I/MMKV (18054): loading [test_empty_string] with 0 actual size, file size 4096, InterProcess 0, meta info version:1 I/MMKV (18054): loaded [test_empty_string] with 0 key-values E/flutter (18054): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: NoSuchMethodError: The method 'setAll' was called on null. E/flutter (18054): Receiver: null E/flutter (18054): Tried calling: setAll(0, Uint8Array) E/flutter (18054): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5) E/flutter (18054): #1 MMBuffer.fromList (package:mmkv/mmkv.dart:65:21) E/flutter (18054): #2 MMKV.encodeString (package:mmkv/mmkv.dart:270:26) E/flutter (18054): #3 _TestTextFieldState.build.. (package:fluttertestapp/test_text_field.dart:29:26) E/flutter (18054): #4 _rootRunUnary (dart:async/zone.dart:1198:47) E/flutter (18054): #5 _CustomZone.runUnary (dart:async/zone.dart:1100:19) E/flutter (18054): #6 _FutureListener.handleValue (dart:async/future_impl.dart:143:18) E/flutter (18054): #7 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45) E/flutter (18054): #8 Future._propagateToListeners (dart:async/future_impl.dart:725:32) E/flutter (18054): #9 Future._completeWithValue (dart:async/future_impl.dart:529:5) E/flutter (18054): #10 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15) E/flutter (18054): #11 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13) E/flutter (18054): #12 MMKV.initialize (package:mmkv/mmkv.dart) E/flutter (18054): E/flutter (18054): #13 _TestTextFieldState.build. (package:fluttertestapp/test_text_field.dart:25:24) E/flutter (18054): #14 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:993:19) E/flutter (18054): #15 _InkResponseState.build. (package:flutter/src/material/ink_well.dart:1111:38) E/flutter (18054): #16 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:183:24) E/flutter (18054): #17 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:598:11) E/flutter (18054): #18 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:287:5) E/flutter (18054): #19 BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:259:7) E/flutter (18054): #20 GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:157:27) E/flutter (18054): #21 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:362:20) E/flutter (18054): #22 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:338:22) E/flutter (18054): #23 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:267:11) E/flutter (18054): #24 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:295:7) E/flutter (18054): #25 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:240:7) E/flutter (18054): #26 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:213:7) E/flutter (18054): #27 _rootRunUnary (dart:async/zone.dart:1206:13) E/flutter (18054): #28 _CustomZone.runUnary (dart:async/zone.dart:1100:19) E/flutter (18054): #29 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7) E/flutter (18054): #30 _invoke1 (dart:ui/hooks.dart:265:10) E/flutter (18054): #31 _dispatchPointerDataPacket (dart:ui/hooks.dart:174:5) E/flutter (18054):

Am i using MMKV in a wrong way?

lingol commented 3 years ago

It looks like a bug and I will look into it. For the moment, why not just delete the key?

lingol commented 3 years ago

Released with v1.2.8.