草庐IT

android - 调用api时如何处理map<dynamic> null对象

coder 2023-07-24 原文

如果 status 不是 200,我如何管理服务器响应。

@JsonSerializable(nullable: false)
class LoginResponse {
  final String error;
  final int status;
  final List<User> userList;
  LoginResponse({this.error, this.status, this.userList});

  factory LoginResponse.fromJson(Map repJson){

List<dynamic> userListResp=repJson['userData'];
List<User> userList=userListResp.map((e)=>User.fromUser(e)).toList();
int s=repJson['status'];
   if(s==200){
     return LoginResponse(error:repJson['error'],status: repJson['status'],userList:userList);
   } else{
     return LoginResponse(error:repJson['error'],status: repJson['status']);
   }}}

  class User{
  String cust_id;
  String cust_name;
  String cust_email;
  String cust_mob;

  User({this.cust_id,this.cust_name,this.cust_email,this.cust_mob});
  factory User.fromUser(Map userJson){
    return User(cust_id: userJson['cust_id'],cust_name: userJson['cust_name'],
        cust_email: userJson['cust_email'],cust_mob: userJson['cust_mob']);
  }
}

发生错误时的服务器响应

{"error":"1","status":201,"message":"Entered email id already exist in our records"}

成功时服务器响应

  {
"error":"0",
"status":200,
"userData":[
 {
    "cust_id":"87",
    "cust_name":"kio",
    "cust_email":"kio1@kio.com",
    "cust_gend":null,
    "cust_dob":null,
    "cust_mob":"098998899889588",
    "cust_pass":"e10adc3949ba59abbe56e057f20f883e",
    "cust_age":null,
    "device_type":"android",
    "device_token":"eNWqzDwxqsQ:APA91bF-uK1MI11D3SgHGSw7Omv1imjDrPKBBCrN9JgmyJppHsNVeG5l56EkCCd5ZMaxL_ehQzVhtoEj0fTNB55wYGJt5BqYVvwfAb7HrBqwb_21M6VFPuF6LQINkvE1offQgZYweROO",
    "status":"0",
    "createAt":"2019-01-31 18:45:19",
    "updatedAt":"0000-00-00 00:00:00",
    "login_type":"",
    "login_id":null,
    "is_guest":"0",
    "auth_token":"",
    "forgot_token":null
 }]
}

当用户数据不存在或为空时如何管理,我尝试在状态代码为 201 但仍然显示时进行管理

NoSuchMethodError: The method 'map' was called on null.

最佳答案

要修复您的代码,请将 userList 映射移动到 if block 中。这样你将解析只有状态码为 200 的响应。

int s=repJson['status'];
if (s==200) {
  List<dynamic> userListResp=repJson['userData'];
  List<User> userList=userListResp.map((e)=>User.fromUser(e)).toList();
  return LoginResponse(error:repJson['error'], status:repJson['status'], userList:userList);
} else {
  return LoginResponse(error:repJson['error'], status:repJson['status']);
}

但是,您可能不想处理模型中的错误。最好在执行请求后检查错误,然后再决定是否要解析响应。

像这样的东西会更容易处理并且不会污染你的模型对象:

final response = await client.get(requestUrl);
if (response.statusCode == 200) {
  // If the call to the server was successful, parse the JSON
  final loginResponse = LoginResponse.fromJson(json.decode(response.body));

  // ...
} else {
  // If that call was not successful, throw an error or parse the error object.
  throw Exception('Failed to login');

  // ...
}

关于android - 调用api时如何处理map<dynamic> null对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54461953/

有关android - 调用api时如何处理map<dynamic> null对象的更多相关文章

  1. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  2. ruby-on-rails - Enumerator.new 如何处理已通过的 block ? - 2

    我在理解Enumerator.new方法的工作原理时遇到了一些困难。假设文档中的示例:fib=Enumerator.newdo|y|a=b=1loopdoy[1,1,2,3,5,8,13,21,34,55]循环中断条件在哪里,它如何知道循环应该迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)? 最佳答案 Enumerator使用Fibers在内部。您的示例等效于:require'fiber'fiber=Fiber.newdoa=b=1loopdoFiber.yieldaa,b=b,a+bendend10.times.m

  3. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  4. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  5. ruby-on-rails - ActionController::RoutingError: 未初始化常量 Api::V1::ApiController - 2

    我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc

  6. ruby-on-rails - Nokogiri:使用 XPath 搜索 <div> - 2

    我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll

  7. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  8. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  9. ruby - 调用其他方法的 TDD 方法的正确方法 - 2

    我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent

  10. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

随机推荐