【问题标题】:retrofit is not getting the id of JSON object改造没有得到 JSON 对象的 id
【发布时间】:2016-08-02 17:51:31
【问题描述】:

它正在成功获取名称、状态和登录。但是它将 0 分配给 u_id (user id) ,它应该是 4。也许它是从 Json 获取 Id 作为字符串?我不知道整数的正确 JSON 格式。

JSON:

{
  "id": "4",
  "name": "nuku",
  "status": "1",
  "login": "sucess"
}

POJO: 公共类登录模型 {

    @Expose
    public static int id;

    @Expose
    public String name;

    @Expose
    private String status;
    @Expose
    private String login;
...}

界面:

   String url = "http://192.168.10.5/tourist/v1";
    @FormUrlEncoded
    @POST("/login")
    void Login(@Field("email") String email,
               @Field("pass") String pass, Callback<LoginModel> cb);
}

改造函数调用:

RestAdapter adapter = new RestAdapter.Builder().setEndpoint(RestInterface.url).build();

                    //Creating Rest Services
                    final RestInterface restInterface = adapter.create(RestInterface.class);

                    //Calling method to get check login
                    restInterface.Login(email.getText().toString(), pass.getText().toString(), new Callback<LoginModel>() {
                        @Override
                        public void success(LoginModel model, Response response) {

                            //finish();
                            //startActivity(getIntent());

                            email.setText("");
                            pass.setText("");

                                 int id = model.getUserId();
                            if (model.getStatus().equals("1")) {  //login Success

                                SharedPreferences sharedPreferences = getSharedPreferences("MyLogin.txt", Context.MODE_PRIVATE);
                                SharedPreferences.Editor editor = sharedPreferences.edit();
                                editor.putBoolean("FirstLogin", true);
                                editor.commit();



                                Toast.makeText(LoginActivity.this, "Login In SuccessFully"+model.getUserId(), Toast.LENGTH_SHORT).show();

                                manager.setPreferences(LoginActivity.this, "status", "1");
                                String status=manager.getPreferences(LoginActivity.this,"status");

                                Intent i = new Intent(LoginActivity.this,MainActivity.class);


                                String name = model.getUser_name();
                                i.putExtra("username", name);
                               // String image = p.getPlace_image();
                               // i.putExtra("Thumbnail", image);
                                i.putExtra(MainActivity.EXTRA_USER,"username");
                                startActivity(i);



                              //  String nameStr = email.getText().toString();

                                // i.putExtra("text1", nameStr);
                                //startActivity(i);

                            } else if (model.getStatus().equals("0"))  // login failure
                            {
                                Toast.makeText(LoginActivity.this, "Invalid UserName/Pass ", Toast.LENGTH_SHORT).show();
                                Intent i = new Intent(LoginActivity.this, LoginActivity.class);
                                startActivity(i);

                            }
                        }

                        @Override
                        public void failure(RetrofitError error) {
                            finish();
                            startActivity(getIntent());
                            String merror = error.getMessage();
                            Toast.makeText(LoginActivity.this, merror, Toast.LENGTH_LONG).show();
                        }
                    });
                }

【问题讨论】:

  • 乍一看,代码似乎一切正常。你确定那是你从 API 得到的 json 吗?你能以某种方式证实这一点吗?
  • @Fred 是的,我直接从邮递员预览中复制了它。
  • 这看起来像一个字符串,而不是一个整数。您是否尝试将其作为字符串检索,然后将其转换为整数?
  • @cuoka 我不知道该怎么做我应该在响应函数或登录模型中将其转换为整数我完全困惑
  • @cuoka 正在尝试这个希望这会工作 LoginModel lm = response.body(); int u_id = ((int) lm.getUserId());

标签: android json retrofit isnull


【解决方案1】:

要么您的 LoginModel 不正确,要么发送 JSON 的那个不正确。您在 JSON 中的 ID 是字符串,而不是整数(注意双引号)

您必须在 LoginModel 中将 ID 类型更改为 String,但是,IMO,更好的解决方案是将其接收为 Integer。

这是一个包含整数的 JSON 示例:

{
 "email":"some@email.com",
 "age":25,
 "man":true,
 "password":"123456"
}

【讨论】:

  • @NukhbaArshad 太好了,如果对您有帮助,请接受答案。
【解决方案2】:

我尝试将 Id 获取为字符串,但对其进行了改造,因此我只是使用此 echo json_encode($output,JSON_NUMERIC_CHECK); 将我的 JSON 转换为整数。并且成功了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 2014-10-16
    相关资源
    最近更新 更多