首页 > 解决方案 > 如何修复未处理的异常:NoSuchMethodError:在 null 上调用了 setter 'dateTime='

问题描述

现在我正在尝试将 DB Shared Pref 更改为 SqlLite,并且我正在测试 SqlLite DB。

TodoList Info 将存储在 SqlLite DB 中。

因此,待办事项列表的模型如下。

     class TodoModel {
      int dateTime;
      String todo;
      int isDone;
    
      todoModelMap() {
        var mapping =  Map<String, dynamic>();
        mapping['dateTime'] = this.dateTime;
        mapping['todo'] = this.todo;
        mapping['isDone'] = this.isDone;
    
        return mapping;
      }
    }

问题是我试图将模型存储在 todoList Provider File 中,但编译器调用错误 dateTime 为 null

addTodoList(DateTime dateTime, TextEditingController eventController) async {
    
        if(eventController.text.isEmpty) { return; }
        else {
          if (events[dateTime] != null) {

            ----------------------------------------------------
            todoModel.dateTime = dateTime.millisecondsSinceEpoch;
            // I used milisecondsSinceEpoch to save DateTime as int.
            todoModel.todo = eventController.text;
            todoModel.isDone = 0;
            var result = await todoService.saveTodo(todoModel);
            print(result);
            ---------------------------------------------------
    
            events[dateTime].add(toMap(eventController));
          } else {
            events[dateTime] = [toMap(eventController)];
          }
    
          eventController.clear();
          save();
          eventController.clear();
          notifyListeners();
        }
      }

我找不到为什么 dateTime 为空,因为在这里作为 int 的 dateTime 打印得很好..

onPressed: (){
                    print(controller.selectedDay.millisecondsSinceEpoch);
                    todoListHandler.addTodoList(controller.selectedDay, eventController);
                    Navigator.pop(context);
                  },
                )

++ 我想知道这个错误的解决方案

W/System.err(16005):java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int android.content.ClipData.getItemCount()”

当 raiseButton 为 onPressed 时会发生此错误。但是存储数据没有问题

// 这是我的完整错误代码

    W/System.err(16005): java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.ClipData.getItemCount()' on a null object reference
    W/System.err(16005):    at android.os.Parcel.readException(Parcel.java:1626)
    W/System.err(16005):    at android.os.Parcel.readException(Parcel.java:1573)
    W/System.err(16005):    at android.content.IClipboard$Stub$Proxy.getPrimaryClip(IClipboard.java:197)
    W/System.err(16005):    at android.content.ClipboardManager.getPrimaryClip(ClipboardManager.java:247)
    W/System.err(16005):    at io.flutter.plugin.platform.PlatformPlugin.getClipboardData(PlatformPlugin.java:274)
    W/System.err(16005):    at io.flutter.plugin.platform.PlatformPlugin.access$700(PlatformPlugin.java:24)
    W/System.err(16005):    at io.flutter.plugin.platform.PlatformPlugin$1.getClipboardData(PlatformPlugin.java:81)
    W/System.err(16005):    at io.flutter.embedding.engine.systemchannels.PlatformChannel$1.onMethodCall(PlatformChannel.java:141)
    W/System.err(16005):    at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:230)
    W/System.err(16005):    at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
    W/System.err(16005):    at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
    W/System.err(16005):    at android.os.MessageQueue.nativePollOnce(Native Method)
    W/System.err(16005):    at android.os.MessageQueue.next(MessageQueue.java:323)
    W/System.err(16005):    at android.os.Looper.loop(Looper.java:143)
    W/System.err(16005):    at android.app.ActivityThread.main(ActivityThread.java:7225)
    W/System.err(16005):    at java.lang.reflect.Method.invoke(Native Method)
    W/System.err(16005):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
    W/System.err(16005):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
    D/ViewRootImpl(16005): ViewPostImeInputStage processPointer 0
    D/ViewRootImpl(16005): ViewPostImeInputStage processPointer 1
    I/flutter (16005): 1601380800000
    E/flutter (16005): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: NoSuchMethodError: The setter 'dateTime=' was called on null.
    E/flutter (16005): Receiver: null
    E/flutter (16005): Tried calling: dateTime=1601380800000
    E/flutter (16005): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
    E/flutter (16005): #1      TodoListHandler.addTodoList (package:take_a_note_project/todoList/todoList_handler.dart:57:19)
    E/flutter (16005): #2      _TodoListState._showAddDialog.<anonymous closure>.<anonymous closure> (package:take_a_note_project/todoList/todoList.dart:134:33)
    E/flutter (16005): #3      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:992:19)
    E/flutter (16005): #4      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1098:38)
    E/flutter (16005): #5      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:184:24)
    E/flutter (16005): #6      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:524:11)
    E/flutter (16005): #7      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:284:5)
    E/flutter (16005): #8      BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:219:7)
    E/flutter (16005): #9      PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:477:9)
    E/flutter (16005): #10     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:78:12)
    E/flutter (16005): #11     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:124:9)
    E/flutter (16005): #12     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
    E/flutter (16005): #13     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:122:18)
    E/flutter (16005): #14     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:108:7)
    E/flutter (16005): #15     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:220:19)
    E/flutter (16005): #16     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:200:22)
    E/flutter (16005): #17     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:158:7)
    E/flutter (16005): #18     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:104:7)
    E/flutter (16005): #19     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:88:7)
    E/flutter (16005): #20     _rootRunUnary (dart:async/zone.dart:1206:13)
    E/flutter (16005): #21     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
    E/flutter (16005): #22     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
    E/flutter (16005): #23     _invoke1 (dart:ui/hooks.dart:267:10)
    E/flutter (16005): #24     _dispatchPointerDataPacket (dart:ui/hooks.dart:176:5)

标签: flutternull

解决方案


你必须TodoModel首先创建对象,因为没有创建对象它是空的,然后你也试图分配它。然后你可以给出它的价值。

TodoModel _todoModel=new TodoModel();
_todoModel.dateTime = dateTime.millisecondsSinceEpoch;
_todoModel.todo = eventController.text;
_todoModel.isDone = 0;
var result = await todoService.saveTodo(_todoModel);

对于您的第二个错误,java.lang.NullPointerException您可以参考此https://github.com/flutter/flutter/issues/24757


推荐阅读