java - 如何在Android中的TextView和EditText中显示来自API服务器的JSON数据?

标签 java android rest retrofit2

我正在尝试获取 JSON 响应的值并将其显示在我的 textView 和 editText 中。但我收到一个空对象引用错误。

JSON 响应:

{
    "srNo": 1,
    "date": "11/14/2019 12:00:00 AM",
    "fieldEngineer": "Angel",
    "accountName": "Forever 21 Megamall",
    "irNo": 1,
    "joNo": 1,
    "address": "Mandaluyong City",
    "contactPerson": "Jansen Babon",
    "designation": "",
    "contactNo": "",
    "email": "",
    "timeIn": "00:00:00",
    "timeOut": "00:00:00",
    "productType": "Security",
    "problem": ""
}

Java 类:

    private void fetchData() {
        JsonObject paramObject = new JsonObject();


        Call<ResObj> call = userService.userLogin(paramObject);
        call.enqueue(new Callback<ResObj>() {
            @Override
            public void onResponse(Call<ResObj> call, retrofit2.Response<ResObj> response) {



               ResObj resObj = response.body();

               String srNo = resObj.getSrNo();
               String date = resObj.getDate();
               String fieldEngineer = resObj.getFieldEngineer();
               String accountName = resObj.getAccountName();
               String irNo = resObj.getIrNo();
               String joNo = resObj.getJoNo();
               String address = resObj.getAddress();
               String contactPerson = resObj.getContactPerson();
               String designation = resObj.getDesignation();
               String contactNo = resObj.getContactNo();
               String email = resObj.getEmail();
               String timeIn = resObj.getTimeIn();
               String timeOut = resObj.getTimeOut();
               String productType = resObj.getProductType();
               String problem = resObj.getProblem();

               //the response I am getting here is null

               tvSrNo.setText(srNo);
               etdate.setText(date);
               etfieldengineer.setText(fieldEngineer);
               etaccname.setText(accountName);
               etirno.setText(irNo);
               etjono.setText(joNo);

                JsonObject workObj = new JsonObject();

                try {
                    workObj.addProperty("srNo", resObj.getSrNo());
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }

            @Override
            public void onFailure(Call<ResObj> call, Throwable t) {

            }
        });
    }

我尝试使用这个 tvSrNo.setText(resObj.getSrNo()) 而不是 tvSrNo.setText(srNo) 但它仍然遇到同样的问题。

我也在使用 Retrofit。

我期望 JSON 数据将被放置在 editText 或 textView 中。但显然,响应变得无效。

ResObj 类:

    private String date;
    private String address;
    private String accountName;
    private String contactPerson;
    private String timeOut;
    private String problem;
    private String srNo;
    private String fieldEngineer;
    private String joNo;
    private String irNo;
    private String message;
    private String designation;
    private String email;
    private String timeIn;
    private String productType;
    private boolean status;
    private String contactNo;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }


    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getAccountName() {
        return accountName;
    }

    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }

    public String getContactPerson() {
        return contactPerson;
    }

    public void setContactPerson(String contactPerson) {
        this.contactPerson = contactPerson;
    }

    public String getTimeOut() {
        return timeOut;
    }

    public void setTimeOut(String timeOut) {
        this.timeOut = timeOut;
    }

    public String getProblem() {
        return problem;
    }

    public void setProblem(String problem) {
        this.problem = problem;
    }

    public String getSrNo() {
        return srNo;
    }

    public void setSrNo(String srNo) {
        this.srNo = srNo;
    }

    public String getFieldEngineer() {
        return fieldEngineer;
    }

    public void setFieldEngineer(String fieldEngineer) {
        this.fieldEngineer = fieldEngineer;
    }

    public String getJoNo() {
        return joNo;
    }

    public void setJoNo(String joNo) {
        this.joNo = joNo;
    }

    public String getIrNo() {
        return irNo;
    }

    public void setIrNo(String irNo) {
        this.irNo = irNo;
    }

    public String getDesignation() {
        return designation;
    }

    public void setDesignation(String designation) {
        this.designation = designation;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getTimeIn() {
        return timeIn;
    }

    public void setTimeIn(String timeIn) {
        this.timeIn = timeIn;
    }

    public String getProductType() {
        return productType;
    }

    public void setProductType(String productType) {
        this.productType = productType;
    }

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    public String getContactNo() {
        return contactNo;
    }

    public void setContactNo(String contactNo) {
        this.contactNo = contactNo;
    }

Logcat:

    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.android.ras.ResObj.getSrNo()' on a null object reference
        at com.example.android.ras.MainActivity$3.onResponse(MainActivity.java:187)
        at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:71)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

最佳答案

将字符串更改为整数

 public class Codebeautify {
     private Integer srNo;
     private String date;
     private String fieldEngineer;
     private String accountName;
     private Integer irNo;
     private Integer joNo;
     private String address;
     private String contactPerson;
     private String designation;
     private String contactNo;
     private String email;
     private String timeIn;
     private String timeOut;
     private String productType;
     private String problem;


     // Getter Methods 

     public Integer getSrNo() {
      return srNo;
     }

     public String getDate() {
      return date;
     }

     public String getFieldEngineer() {
      return fieldEngineer;
     }

     public String getAccountName() {
      return accountName;
     }

     public Integer getIrNo() {
      return irNo;
     }

     public  Integer getJoNo() {
      return joNo;
     }

     public String getAddress() {
      return address;
     }

     public String getContactPerson() {
      return contactPerson;
     }

     public String getDesignation() {
      return designation;
     }

     public String getContactNo() {
      return contactNo;
     }

     public String getEmail() {
      return email;
     }

     public String getTimeIn() {
      return timeIn;
     }

     public String getTimeOut() {
      return timeOut;
     }

     public String getProductType() {
      return productType;
     }

     public String getProblem() {
      return problem;
     }

     // Setter Methods 

     public void setSrNo(Integer srNo) {
      this.srNo = srNo;
     }

     public void setDate(String date) {
      this.date = date;
     }

     public void setFieldEngineer(String fieldEngineer) {
      this.fieldEngineer = fieldEngineer;
     }

     public void setAccountName(String accountName) {
      this.accountName = accountName;
     }

     public void setIrNo(Integer irNo) {
      this.irNo = irNo;
     }

     public void setJoNo(Integer joNo) {
      this.joNo = joNo;
     }

     public void setAddress(String address) {
      this.address = address;
     }

     public void setContactPerson(String contactPerson) {
      this.contactPerson = contactPerson;
     }

     public void setDesignation(String designation) {
      this.designation = designation;
     }

     public void setContactNo(String contactNo) {
      this.contactNo = contactNo;
     }

     public void setEmail(String email) {
      this.email = email;
     }

     public void setTimeIn(String timeIn) {
      this.timeIn = timeIn;
     }

     public void setTimeOut(String timeOut) {
      this.timeOut = timeOut;
     }

     public void setProductType(String productType) {
      this.productType = productType;
     }

     public void setProblem(String problem) {
      this.problem = problem;
     }
    }

关于java - 如何在Android中的TextView和EditText中显示来自API服务器的JSON数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59082596/

相关文章:

android - weakreference vs eventbus以避免内存泄漏android?

java - 字符串数组列表未正确传递到另一个类的数组列表以显示在下拉列表中

java - Android:自定义通知声音不播放

java - 出现错误时如何继续处理项目?

Java Swing,如何在“下一步”按钮后更改布局

rest - mailchimp3 (Python-mailchimp-api) 如何设置标签

rest - 带有上次登录数据库的 MarkLogic 用户管理

wcf - 为什么我的 Azure、WCF、REST、SSL 项目无法运行?我究竟做错了什么?

javascript - Spring数据传递

java - 如何在类中映射没有属性 id 的 hibernate 映射文件?