如何从方法通道中检索模型?

evrscar2  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(238)

我想从原生android中检索一个模型,通过methodchannel进行flatter。我的当前代码:

new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
    new MethodCallHandler() {
        @Override
        public void onMethodCall(MethodCall methodCall, Result result) {
            if (methodCall.method.equals("getModel")) {

                NewModel model = new NewModel();
                model.id = 1;
                model.title = "Title is here!";

                result.success(model);
            }

        }
    }
);

这是我的 NewModel :

class NewModel {
    public int id;
    public String title;
}

在Flutter中,我使用相同的模型,并尝试使用以下代码获得响应:

NewModel response = await platformMethodChannel.invokeMethod('getModel');
class NewModel {
  int id;
  String title;
}

错误如下:

E/MethodChannel#com.methodchannel/test(25656):  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/MethodChannel#com.methodchannel/test(25656):  at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/MethodChannel#com.methodchannel/test(25656):  at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/MethodChannel#com.methodchannel/test(25656):  at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#com.methodchannel/test(25656):  at android.os.MessageQueue.next(MessageQueue.java:326)
E/MethodChannel#com.methodchannel/test(25656):  at android.os.Looper.loop(Looper.java:183)
E/MethodChannel#com.methodchannel/test(25656):  at android.app.ActivityThread.main(ActivityThread.java:7211)
E/MethodChannel#com.methodchannel/test(25656):  at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#com.methodchannel/test(25656):  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
E/MethodChannel#com.methodchannel/test(25656):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)

我怎样才能解决这个问题?
注意:我可以成功地获得 string 响应和 string list 如前所述。但我找不到模特。所以,这不是一个重复的问题。

g6ll5ycj

g6ll5ycj1#

您可以将模型转换为json。然后可以将json转换为model。
首先,您需要添加 toString() 方法 Java 模型如下:

class NewModel {
    public int id;
    public String title;

    @Override
    public String toString() {
        return   "{\"id\": "+id+",\"title\": \""+ title+"\"}";
    }
}

然后,可以将模型转换为 String 这样地:

new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
            new MethodCallHandler() {
                @Override
                public void onMethodCall(MethodCall methodCall, Result result) {
                    if (methodCall.method.equals("getModel")) {

                        NewModel model = new NewModel();
                        model.id = 1;
                        model.title = "Title is here!";

                        result.success(model.toString()); // In here!
                    }

                }
            }
    );
string response = await platformMethodChannel.invokeMethod('getModel');

   NewModel model=json.decode(response);

相关问题