有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想通过方法通道从本机Android检索一个模型。我当前的代码:

       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;
}

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

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 安卓.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#com.methodchannel/test(25656):  at 安卓.os.MessageQueue.next(MessageQueue.java:326)
E/MethodChannel#com.methodchannel/test(25656):  at 安卓.os.Looper.loop(Looper.java:183)
E/MethodChannel#com.methodchannel/test(25656):  at 安卓.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.安卓.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
E/MethodChannel#com.methodchannel/test(25656):  at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:975)


我怎样才能解决这个问题

注意:我可以成功地获得唯一的string响应和string list响应,正如前面在here中所问的那样。但是我买不到模型。因此,这不是一个重复的问题


共 (1) 个答案

  1. # 1 楼答案

    您可以将模型转换为JSON。然后可以将JSON转换为模型

    首先,您需要在Java模型中添加toString()方法,如下所示:

    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);